18455


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

[code]

    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()
        }
    }
    
[/code]

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

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

なぜでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2015-11-06T00:42:21.327
18448
2015-11-06T02:50:53.443
2015-11-06T02:42:27.743
7362
question
ios swift
addTargetだとstartAnimation()が動かない


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

[code]

    /*
        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)
    
[/code]

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


CC BY-SA 3.0
2015-11-06T02:50:53.443
18455
2015-11-06T02:50:53.443
7362
18448
answer