2015-12-05 7 views
14

これに類似の質問が1つ見つかりましたが、私の質問には答えられませんでした。 私はUIButtonを持っています。これは、画面の下部から上部にアニメーション化されています。私はそれが動いている間にボタンを使用できるようにしたいと思います。今度は、ボタンはアニメーションが終了し、ボタンがアニメーション化されなくなったときにのみ使用できます。また、私はNSTimerと呼ばれるものを使う必要があると聞いたことがありますか?アニメーション中にUIButtonを使用する方法

class ViewController: UIViewController { 

    @IBAction func button2(sender: UIButton) { 
     button.hidden = false 
     button.center = CGPointMake(126, 380);   
     UIView.animateKeyframesWithDuration(3, delay: 0, options: .AllowUserInteraction, 
      animations: {() -> Void in 
      self.button.center = CGPointMake(126, 130) 
      }) { (_) -> Void in 
     } 
    } 

    @IBOutlet var label: UILabel! 
    @IBOutlet var button: UIButton! 

    @IBAction func button1(sender: UIButton) { 
     button.hidden = true 
     label.hidden = false 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     button.hidden = true 
     label.hidden = true 
    } 
} 
+1

は 'userInteractionEnabledに設定button'のですか? – Aaron

+0

関連:http://stackoverflow.com/a/7558416/2108547 –

+0

はい、アニメーションが終了した後は動作しますが、アニメーション中は動作しません。 –

答えて

8

CADisplayLinkを使用する必要があります。たとえば:

@IBOutlet var button2: UIButton! 

@IBAction func button3(sender: UIButton) 
{ 
    label.hidden = false 
    button2.hidden = true 
} 

@IBAction func button1(sender: UIButton) 
{ 
    button2.frame = CGRectMake(120, 400, 100, 100) 
    let displayLink = CADisplayLink(target: self, selector: "handleDisplayLink:") 
    displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) 
} 

func handleDisplayLink(displayLink: CADisplayLink) 
{ 
    var buttonFrame = button2.frame 
    buttonFrame.origin.y += -2 
    button2.frame = buttonFrame 

    if button2.frame.origin.y <= 50 
    { 
     displayLink.invalidate() 
    } 
} 

また、この質問を確認することができます。Moving a button in swift using animate with duration with constraints and detecting a touch during it

関連する問題