2016-08-23 60 views
-4

我想在for循環中移動一個矩形來創建一個隨機行走。但我只能得到最終的立場而不是動作。我需要做些什麼才能看到各個步驟?如何使用for循環動畫UIView?

import UIKit 
import PlaygroundSupport 

class ViewController:UIViewController{ 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

class bird: UIView { 
    var x:CGFloat 
    var y:CGFloat 

    override init(frame: CGRect){ 
     self.x=0 
     self.y=0 
     super.init(frame: frame) 
    } 

    func stepit(dx: CGFloat, dy: CGFloat){ 
     self.frame.origin.x += dx 
     self.frame.origin.y += dy 
    } 

    override func draw(_ rect: CGRect) { 
     self.backgroundColor = #colorLiteral(red: 0.960784316062927, green: 0.705882370471954, blue: 0.200000002980232, alpha: 1.0) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

let viewController = ViewController() 
PlaygroundPage.current.liveView = viewController 
PlaygroundPage.current.needsIndefiniteExecution = true 

let b=bird(frame: CGRect(x: 0, y: 0, width: 20, height: 20)) 
viewController.view.addSubview(b) 

for i in i... 100 { 
    b.stepit(dx: CGFloat(arc4random_uniform(10)), dy: CGFloat(arc4random_uniform(10))) 
} 
+3

我看到你的全部大寫,並提高你我的downvote。 – Alexander

+0

做了一些研究,也遵循命名約定是一個好主意。 –

+0

我不確定你是否清楚瞭解運行循環在iOS中的工作原理...? – holex

回答

0

您應該使用animateWithDuration()。將以下代碼放入您的stepit()函數中。正如holex所說,請對語言進行一些研究。 For循環在每一步都不會暫停,您正在移動這隻鳥,但是您只會看到終點,因爲它會很快地碰到for循環。

UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.TransitionNone, animations: {() -> Void in 

    self.frame.origin.x = dx 
    self.frame.origin.y = dy 

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

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/