withアプリーチアプリ開発でなにかと必要になる小技「クリップボードにコピー」。実際の実装方法と使い方、「コピーしました」のバルーン表示の自作方法をまとめていきます。テキストをクリップボードにコピーさせる方法SwiftでユーザーのクリップボードへテキストなどをコピーさせるにはUIPasteboardクラスを使用します。NSObjectUIPasteboardクラスのgeneralプロパティの中に文字列やURL、画像などの様々な種類のデータを保持することができるので、ここにそれぞれ値を入れ込めばクリップボードにコピーされた状態になります。UIColor.whiteあとはこの処理をボタンのアクションの中などで実行すれば押しただけで任意の値をコピーさせることができるようになります。アプリ内の文字列はコピーできない?そもそもアプリ内でText表示させている文字列などは触ろうとしても選択/コピーすることができない仕様になっています。ユーザーがコピーできるようにするには今回のようにクリップボードにコードからコピーさせるか下記記事のように選択/コピーが可能になるようにモディファイアを追加しなければいけません。今回はユーザビリティを高めるためにコピーボタンの作成と押されたら「コピーしました」とメッセージ(バルーン表示)が出るようにしていきたいと思います。UIを使用して作成していきます。ポイントバルーン表示用のクラスを作成プロパティopacity:バルーンの透明感を制御プロパティisPreview:バルーンの表示/非表示を制御ボタンクリックでバルーン表示後徐々に消えていくtimerを使ってopacityを操作してアニメーションを実装バルーン表示用のクラスを作成ますばクラスを作成します。作成するMessageBalloonクラスはプロパティの変化を観測できるようにObservableObjectプロトコルに準拠させておき、プロパティには@Publishedを付与しておきます。}opacityモディファイアでの指定はDouble型で「0〜1」ですが、vanishMessageメソッドで「-0.1」ずつに減らしていくと正確な引き算ができない(Swiftの仕様上)ので「0〜10」の間で「-1」ずつ変化させるようにします。vanishMessageメソッドではTimerを使用して0.1秒ごとに処理をリピートさせ、opacityの値が0になったタイミングで非表示にしつつ、opacityを初期値に戻しておきます。ちなみにvanishMessageメソッドのようなクロージャの中で自身のプロパティの値を変更するのは構造体ではできずに以下のようなエラーになるので注意してください。続いてコピーボタンを作っていきます。クラスの変更を観測したいので@ObservedObjectをつけてmessageBalloonのインスタンスを作成します。Button構造体のアクションの中でクリップボードへのコピー処理とバルーン表示を表示させる(isPreviewにtrue)処理を実装します。ボタンが押され表示されている間に再度押されないようにdisabled(messageAlert.isPreview)を渡して無効にしておきます。「コピーしました」部分はTextで実装します。あとはデザインと表示位置を調整してopacityモディファイアにcastOpacityメソッドを渡せばOKです。クラスのインスタンスを作成する際は変更を検知できるように@ObservedObjectを付与しておくのを忘れないようにしてください。ZStackまだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。ご覧いただきありがとうございました。友達や家族の誕生日を登録しておくと当日に通知が届きお知らせしてくれるiOSアプリです。貸し借り管理アプリお金の貸し借りを管理するためのアプリです。貸借の色が分かれているので識別しやすく、使いやすさを求めてできるだけシンプルなUIにしています。カシホン人に貸すことが多く、誰に貸したか忘れがちな本の貸し借りを記録できるアプリです。