2015-12-05 4 views
14

Ich habe eine ähnliche Frage zu diesem gefunden, aber es hat meine Frage nicht beantwortet. Ich habe eine UIButton, die von der Unterseite des Bildschirms nach oben animiert wird. Ich würde gerne den Knopf benutzen können, während er sich bewegt. Jetzt kann die Schaltfläche nur verwendet werden, wenn die Animation beendet ist und die Schaltfläche nicht mehr animiert. Außerdem habe ich gehört, dass ich etwas verwenden muss, das NSTimer genannt wird?Wie benutze ich ein UIButton während es animiert

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

ist 'button' zu userInteractionEnabled gesetzt? – Aaron

+0

Related: http://StackOverflow.com/a/7558416/2108547 –

+0

Ja, es funktioniert, sobald die Animation beendet ist, aber nicht während der Animation. –

Antwort

8

Sie müssen eine CADisplayLink verwenden. Zum Beispiel:

@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() 
    } 
} 

Sie auch diese Frage überprüfen: Moving a button in swift using animate with duration with constraints and detecting a touch during it

Verwandte Themen