Swift

Swift:addGestureRecognizerの使い方


『UIButtonをタップした時に、イベントを起こすのはできるけど、
viewなどの他のUIのタップも検知して、イベントを起こせたらいいなぁ・・・』

と思ったことはありませんか?

実はそれできるんです!

今回は、UIViewControllerに配置したUILabelをタップすると、
viewの色が変わるアプリを作ります。

まずはStoryBoardを開いてください。
UIViewControllerの真ん中にUILabelを置いてください。
f:id:jumprails3303:20161129223311p:plain

そして、今配置したUILabelをコードと紐付けましょう。
名前は『label』にします。
f:id:jumprails3303:20161129223633p:plain

そして、ViewControllerをこのように編集してください。

import UIKit

class ViewController: UIViewController{
    
    
    @IBOutlet weak var label: UILabel!
   

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let myTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.changeColor(_ :)))
        // イベントが入ったUITapGestureRecognizerをインスタンス化
        
        
        self.label.isUserInteractionEnabled = true
        // タップを検知することができるようにする

        self.label.addGestureRecognizer(myTap)
        // labelにイベントを追加
      
        
    }
    
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
    
    
    func changeColor(_ sender: UITapGestureRecognizer) { // タップするたびにviewの色が変化するイベント
        
        let red = arc4random() % 255
        let green = arc4random() % 255
        let blue = arc4random() % 255
        

        self.view.backgroundColor = UIColor(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: 1.0)
    }
    
        
    
}

コードの解説をします。

UITapGestureRecognizer

let myTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.changeColor(_ :)))

ここの部分のコードは
「タップされると下の方に記述されている『changeColor(_ sender: UITapGestureRecognizer)』というメソッドを処理するよ!」
というものをインスタンス化しています。

isUserInteractionEnabled

UILabelはデフォルトの状態では、タップを検知することができません。
しかし、今回はタップするとイベントが起こるということがしたかったので、
isUserInteractionEnabledが必要だったのです。

addGestureRecognizer

ここで実際にlabelにイベントを追加しています。
addGestureRecognizerの引数にUITapGestureRecognizerのインスタンスを入れます。

おまけ

今回色が変わるイベントをこのように書きました。

func changeColor(_ sender: UITapGestureRecognizer) { // タップするたびにviewの色が変化するイベント
        
        let red = arc4random() % 255
        let green = arc4random() % 255
        let blue = arc4random() % 255
        

        self.view.backgroundColor = UIColor(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: 1.0)
    }

arc4random

arc4randomは乱数を生じさせています。
『%』によってあまりを出して云々・・・

backgroundColorはRGBAで指定してランダム感を楽しみます。


ABOUT ME
ささお
3年目iOSエンジニア。 スタートアップで働いておりやす。 プログラミングスクールとエンジニアのキャリアを考えたい。 作ったアプリ - https://apps.apple.com/us/app/loverprofile/id1463563845?l=ja&ls=1