ボタン押したよイベント
viewDidLoadメソッドは、viewがロードされたときに呼ばれるメソッド。ここでイベントの設定できる。 btn1をTouchUpしたら押されたよとコンソールに表示するには下記のようにする。
override func viewDidLoad() { super.viewDidLoad() btn1.addTarget(self, action: "btn1TouchUp:", forControlEvents: .TouchUpInside) } func btn1TouchUp(sender: UIButton){ println("押されたよ") }
下記のようにremoveTargetで、イベントとの関連を消せる
sender.removeTarget(self, action: "btn1TouchUp:", forControlEvents: .TouchUpInside)
ジェスチャーしたよイベント
UIGestureRecognizerというのを使うと、ジェスチャーを検知できる。
スワイプ
override func viewDidLoad() { super.viewDidLoad() let swipeRightRecognizer = UISwipeGestureRecognizer(target: self, action: "swipeRightHandler:") swipeRightRecognizer.direction = .Right self.view.addGestureRecognizer(swipeRightRecognizer) } func swipeRightHandler(ender: UISwipeGestureRecognizer){ println("right swipe") }
回転
override func viewDidLoad() { super.viewDidLoad() let rotateRecognizer = UIRotationGestureRecognizer(target: self, action: "rotateHandler:") self.view.addGestureRecognizer(rotateRecognizer) } func rotateHandler(sender: UIRotationGestureRecognizer){ println("回転中 \(sender.rotation)") }
タップとダブルタップ ダブルタップをすると最初にタップを検知し、次にダブルタップを検知する。ダブルタップだった場合タップを検知したくない場合は、requireGestureRecognizerToFailというのを使う。
override func viewDidLoad() { super.viewDidLoad() let tapRecognizer = UITapGestureRecognizer(target: self, action: "tapHandler:") self.view.addGestureRecognizer(tapRecognizer) let doubleTapRecognizer = UITapGestureRecognizer(target: self, action: "doubleTapHandler:") doubleTapRecognizer.numberOfTapsRequired = 2 self.view.addGestureRecognizer(doubleTapRecognizer) tapRecognizer.requireGestureRecognizerToFail(doubleTapRecognizer) } func tapHandler(sender: UITapGestureRecognizer){ println("Tap!") } func doubleTapHandler(sender: UITapGestureRecognizer){ println("DoubleTap!") }
画面のどこをタップしたのか知りたい
イベントを送ってきたやつはsenderというのですが、sender.locationInView(self.view)とやると、view内の位置を取得できる。
func tapHandler(sender: UITapGestureRecognizer){ let location = sender.locationInView(self.view) println("Tap! Location => (\(location.x), \(location.y))") }