DEV

Xcode Swift - イベント

ボタン押したよイベント

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))")
}