如何使用 for 循环为 UIView 设置动画?

Posted

技术标签:

【中文标题】如何使用 for 循环为 UIView 设置动画?【英文标题】:How to animate UIView with a for loop? 【发布时间】:2016-08-23 15:58:34 【问题描述】:

我想在 for 循环中移动一个矩形来创建随机游走。但我只得到最终位置而不是两者之间的运动。我需要做什么才能查看各个步骤?

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) ))

【问题讨论】:

我看到了你的全部大写,我给你投了反对票。 做一些研究,遵循命名约定也是个好主意。 我不确定您是否清楚地了解运行循环循环在 ios 中的工作原理...? 【参考方案1】:

您应该使用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/

【讨论】:

以上是关于如何使用 for 循环为 UIView 设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局在 UIScrollView 中为视图高度设置动画?

如何通过 iPhone 中的 UIView 动画为带有右帽的水平条设置动画

在 Swift 中,如何使用自动布局为 UIView 设置动画,就像页面滑入一样?

如何在 Swift 中多次为 UIView 的翻转设置动画

iOS 10 UILabels -> 1 UIView -> 循环动画

使用Autolayout为UIView设置动画