如何使用 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 设置动画,就像页面滑入一样?