addTargetだとstartAnimation()が動かない

投稿者: user7165

ボタンを押すとアニメーションが動くように、UIButtonに対してメソッドを登録したいのですが、addGestureRecognizerで登録すると動くのですが、addTargetで登録すると動きません。
コードは以下になります。

class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!

    var startAnimationButton: UIButton!
    var imageArray: [UIImage]!

    override func viewDidLoad() {
        super.viewDidLoad()

        imageArray = [
            UIImage(named: "0.png")!,
            UIImage(named: "1.png")!
        ]

        imageView.animationImages = imageArray
        imageView.animationDuration = 5.0

        let startAnimatonTapGesture: UITapGestureRecognizer = UITapGestureRecognizer()
        startAnimationTapGesture.addTarget(self, action: "startAnimation")

        startAnimationButton = UIButton(frame: CGRectMake(0, 0, 100, 20))
        startAnimationButton.center.x = view.center.x
        startAnimationButton.frame.origin.y = 550
        startAnimationButton.setTitle("start", forState: .Normal)
        startAnimationButton.setTitleColor(UIColor.blackColor(), forState: .Normal)

        startAnimationButton.addGestureRecognizer(startAnimationTapGesture) // addGestureRecognizerメソッド
        // startAnimationButton.addTarget(self, action: "startAnimation", forControlEvents: UIControlEvents.TouchUpInside) // addTargetメソッド

        view.addSubview(startAnimationButton)
    }

    func startAnimation() {
        print("押されたよ!")
        if !imageView.isAnimating() {
            imageView.startAnimating()
        }       
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

上記コードでは、addTargetの箇所をコメントアウトしているのでアニメーションは動くのですが、逆にaddGestureRecognizerをコメントアウトし、addTargetのコメントを外すと、アニメーションは動きせん。

ただし、”押されたよ!”はデバッグエリアに表示されるので、startAnimation()は正しく動いているようです。

なぜでしょうか?

よろしくお願いします。

解決

ご提示のコード一部を書き換えました。といっても、/*〜*/と、//を書き換えただけです。

/*
    let startAnimatonTapGesture: UITapGestureRecognizer = UITapGestureRecognizer()
    startAnimationTapGesture.addTarget(self, action: "startAnimation")
*/
    startAnimationButton = UIButton(frame: CGRectMake(0, 0, 100, 20))
    startAnimationButton.center.x = view.center.x
    startAnimationButton.frame.origin.y = 550
    startAnimationButton.setTitle("start", forState: .Normal)
    startAnimationButton.setTitleColor(UIColor.blackColor(), forState: .Normal)

    // startAnimationButton.addGestureRecognizer(startAnimationTapGesture) // addGestureRecognizerメソッド
    startAnimationButton.addTarget(self, action: "startAnimation", forControlEvents: UIControlEvents.TouchUpInside) // addTargetメソッド

    view.addSubview(startAnimationButton)

コメントアウトする箇所と、コメントから戻す箇所を適正にすれば、ご期待どおりに動きました。ご確認ください。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *