2017年12月07日

WWDC17 | Session 219 | Modern User Interaction on iOS

36:18
https://developer.apple.com/videos/play/wwdc2017/219/

iOSでのユーザー操作の現代的実装にはUIGestureRecognizerが多く使われている。UIGestureRecognizerの基本の復習とiOS11でのアップデート状況。

□基本

UITouch
UIGestureRecognizer

UITouchにより起動されたUIGestureRecognizerの内部状態がどのように変化して、ハンドラーにそれがどう伝達されるかをステップバイステップで図を使って解説。

began
ended
cancelled
moved
failed

等の内部イベント、

possible
failed

の内部状態について説明

□動作原則

Gesture Recognizers first:UIResponderのtouchesBegan等よりも先にUIGestureRecognizerがイベントを取る。

only 1 gesture recognier win:複数のUIGestureRecognizerがある場合でも発火するのは1つだけ。


例外:
gestureRecognizer(_ , shouldRecognizeSimultaneouslyWith otherGestureRecognizer: )
が true を返す場合。複数のUIGestureRecognizerを同時に発火させることができる。

•Failure Requirements

require(toFail: )

other gesture recognizer が failedになるまで(possibleの間は)発火しない。

□実際にユーザーインタラクションを使うための条件

UIView
hitTest → isUserInteractionEnabled → alpha/isHidden → isMultipleTouchEnabled → allowUserInteraction

→アニメーションに関しては別セッション。

□iOS11の新機能(デバッグサポート)

(NEW) UIGestureRecognizer iOS11

name // for debugging

Debugging Hint
po touches.first?.gestureRecognizers
po event?.touches(for:someGestureRecognizer)
po touches.first?.view?.superview?.gestureRecognizers


□Custom UIGestureRecognizersを作るためのヒント

Begin late and fail fast!


□System Gesture Interactionとの関係

iOSでは画面隅でパン動作をするとそれぞれシステムの機能を発動することになる。

下)Multitasking / Dock
右)Slide Over
上)Cover Sheet


・Touch, Long Press等のジェスチャーはSystem, Appは同等の扱い。
・Pan, Swipe動作については、 System 1st, App after

iOS11では、アプリがシステムより優先するための仕組みを提供。

preferredScreenEdgesDeferringSystemGestures()
setNeedsUpdateOfScreenEdgesDeferringSystemGestures()

childViewControllerForScreenEdgesDeferringSystemGestures()


□Drag

UIDragInteraction
内部でUIGestureRecognizerを生成
Long Press and Move activity view controllerを生成
compact environment
posted by 永遠製作所 at 22:08| 東京 ☀| Comment(0) | WWDC | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。