edo1z blog

プログラミングなどに関するブログです

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