2016-08-23 7 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()関数に次のコードを挿入します。そして穴が言ったように、言語に関するいくつかの研究をしてください。 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/

関連する問題