2016-08-23 2 views
-4

Ich möchte ein Rechteck innerhalb einer for-Schleife verschieben, um eine zufällige Wanderung zu erstellen. Aber ich bekomme nur die Endposition, keine Bewegung dazwischen. Was muss ich tun, um die einzelnen Schritte zu sehen?Wie animiere ich UIView mit einer for-Schleife?

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

Ich sehe deine alle Caps, und du meine downvote erhöhen. – Alexander

+0

etwas Forschung, und es ist auch eine gute Idee, Namenskonventionen zu folgen. –

+0

Ich bin mir nicht sicher, ob Sie klar verstehen, wie der Run-Loop-Zyklus in iOS funktioniert ...? – holex

Antwort

0

Sie sollten animateWithDuration() verwenden. Fügen Sie den folgenden Code in Ihre stepit()-Funktion ein. Und wie Holex gesagt hat, bitte recherchiere etwas über die Sprache. Eine for-Schleife pausiert nicht bei jedem Schritt, Sie bewegen den Vogel, aber Sie sehen nur den Endpunkt, weil er so schnell auf die for-Schleife trifft.

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/

Verwandte Themen