2015-03-04 1 views
-1

Я использую CADisplayLink для анимации 10 различных кнопок, но все кнопки сгруппированы. Поэтому мой вопрос заключается в том, как я могу реализовать задержку, чтобы каждая кнопка анимации в другое время, так что они не все сгруппированы вместе.Как настроить задержку в CADisplayLink

var buttons:[UIButton] = Array() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    var displayLink = CADisplayLink(target: self, selector: "handleDisplayLink:") 
    displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode) 

    for index in 0...10 - 1{ 

     buttons.append(UIButton.buttonWithType(.System) as UIButton) 

     var xLocation:CGFloat = CGFloat(arc4random_uniform(300) + 30) 

     buttons[index].frame = CGRectMake(xLocation, 10, 100, 100) 
     buttons[index].setTitle("Test Button \(index)", forState: UIControlState.Normal) 
     buttons[index].addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) 

     self.view.addSubview(buttons[index]) 

    } 



} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

func handleDisplayLink(displayLink: CADisplayLink) { 

    for index in 0...10 - 1{ 

     var buttonFrame = buttons[index].frame 
     buttonFrame.origin.y += 1 
     buttons[index].frame = buttonFrame 
     if buttons[index].frame.origin.y >= 500 { 
      displayLink.invalidate() 
     } 
    } 
} 


func buttonAction(sender: UIButton) { 
    sender.alpha = 0 
} 
+2

Почему вы не используете обычную анимацию вида? Это проще, и вы получаете встроенный параметр задержки. – matt

ответ

0

Чтобы сделать анимацию с задержкой, вы можете просто использовать UIView.animateWithDuration функцию вместо CADisplayLink. Например

override func viewDidLoad() { 
    for index in 0...10 - 1{ 

     buttons.append(UIButton.buttonWithType(.System) as UIButton) 

     var xLocation:CGFloat = CGFloat(arc4random_uniform(300) + 30) 

     buttons[index].frame = CGRectMake(xLocation, 10, 100, 100) 
     buttons[index].setTitle("Test Button \(index)", forState: UIControlState.Normal) 
     buttons[index].addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) 

     self.view.addSubview(buttons[index]) 

     // Change this line to change the delay between the button animations. 
     let delay : NSTimeInterval = 1.0 * NSTimeInterval(index) 

     UIView.animateWithDuration(2.0, delay: delay, options: UIViewAnimationOptions.CurveLinear, animations: {() -> Void in 

      var buttonFrame = self.buttons[index].frame 
      buttonFrame.origin.y = 500 
      self.buttons[index].frame = buttonFrame 


     }, completion: { (finished) -> Void in 

     }) 

    } 
} 
+0

То, что я изначально сделал, но теперь вы не можете использовать кнопки, которые анимируются без CADisplayLink. –

+1

Нажатие на анимированные кнопки сложно, но возможно. Вы задали вопрос об этом? Проблема в том, что вам нужно выполнить собственное тестирование, так как кнопка думает, что она уже находится в конечном месте. –

+0

Вы можете проверить этот ответ, чтобы включить взаимодействие пользователя с анимацией UIButton. http://stackoverflow.com/questions/8346100/uibutton-cant-be-touched-while-animated-with-uiview-animatewithduration – rakeshbs

 Смежные вопросы

  • Нет связанных вопросов^_^