swiftがバージョン3になり、各シンタックスがバージョン2からかなり変更があったので
各シンタックスの確認がてら動かしてみました。
追加したsubViewのフリックイベントの拾い方
viewに対するユーザーイベントはバージョン2同様でGestureRecognizer系を
使用すればイベントを拾える模様
今回はフリックイベントを拾いたいので、以下を使用しました。
・UIPanGestureRecognizer
(iOSの世界ではフリックはPanとい名称らしい)
以下がソースになります。
override func viewDidLoad() {
super.viewDidLoad()
// create gesturView(subView)
let gesturView:UIView = UIView(frame: self.view.bounds)
gesturView.backgroundColor = UIColor.black
// create GesturRecognizer(pan = flick)
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(panGesture(sender:)))
// add GesturRecognizer to subview
gesturView.addGestureRecognizer(panGestureRecognizer)
self.view.addSubview(gesturView)
}
func panGesture(sender:UIPanGestureRecognizer) {
switch (sender.state) {
case .began:
print("pan start")
break
case .ended:
print("pan end")
let translation = sender.translation(in: sender.view)
print(translation)
break
default:
break
}
}
subViewとGesturRecognizerの生成
//create gesturView(subView)
の部分でsuperViewに追加するsubViewを生成してます。
// create GesturRecognizer(pan = flick)
の部分で生成したsubViewに追加するUIPanGestureRecognizerを生成しています。
ここのselectorに渡しているfunctionがフリックイベント発生時に
発火するfuncitonとなります。
ここではpanGestureが発火するように渡しています。
(シンタックス微妙に変更になったようです。selector -> #selector)
// add GesturRecognizer to subview
の部分でsubViewにGesturRecognizer(Pan)を追加してます。
その後subViewをsuperViewであるself.viewに追加しています。
UIPanGestureRecognizerのイベント振り分け
イベント発火時にselector functionに渡されたUIPanGestureRecognizerは
stateというプロパティを持っているので、そのstateをハンドリングすることで、
処理が分けられます。各stateは以下
今回はフリック開始時、終了時にprintだけするものですが、
フリック中等のイベントも拾えるので、色々と処理分けすると面白いものが実装できそうです。
swift3になって様々なシンタックスが変更になっているが、
やはりまだまだ書籍等でも整理しきれていないので、ドンドン触って差分を吸収していくのが大事なんでしょうね。
以上です。