アニメーション探訪3日目。

本日は「onHover」と「DragGesture」「LongPressGesture」のお話です。

前回、指をビューの上に乗せている時に動く(と思われる)「onHover」が、何故か上手く動かないというトラブルに見舞われましたので、まずはそこの部分を切り出して色々検証してみました。

ニャンコ先生「結果はどうだったのニャ?」

まったく反応しませんでした……。

海外のサイトでは普通に動いているような記事がチラホラあるのですが、サンプルコードをそのまま動かしてみても反応なし。アップルのリファレンスページも存在していますので、削除された機能では無いと思うのですが、どうしたことでしょう。

とりあえず今のバージョンのiOSでは動かないみたい。と思って封印しておくことにします。

ただ、これだけでは残念な思いをしただけになってしまうので、色々調べている途中で見つけた「それっぽい方法」を試してみることにしました。

「DragGesture」なる「ドラッグ」の機能、そして「LongPressGesture」なる「長押し」の機能の中に、「onChanged(ドラッグ/長押しを開始した時に実行)」「onEnded(ドラッグ/長押しが終わった時に実行)」というふたつのタイミングがあるとのこと。

これを使うと「操作開始時点でアニメーションを動かし」「指を離したら編集画面に遷移する」ということができそうです。

試しにテキストをひとつ用意して、「ドラッグしたら文字の色を変える」コードを実装。文字の上をタップして、スイスイっとドラッグをすると……。

おお、なるほど。反応しますね。文字の色が変わりました。

「DragGesture」にも「LongPressGesture」にも、ドラッグが反応する「距離」や、長押しが反応する「時間」などの設定ができるようになっていますので、その部分を調整すれば、繊細なコントロールができるボタンのような使い方もできるようです。

ふむふむ、では次はこの機能を使って、アニメーションと画面操作を同時にできるような設定を行ってみましょう。


Apple Developer Documentation
Structure > DragGesture
A dragging motion that invokes an action as the drag-event sequence changes.
外部リンクを開く
Structure > LongPressGesture
A gesture that succeeds when the user performs a long press.
外部リンクを開く