UIImageView 等待动画完成
Posted
技术标签:
【中文标题】UIImageView 等待动画完成【英文标题】:UIImageView wait for animation complete 【发布时间】:2017-03-14 15:47:00 【问题描述】:我正在尝试执行 2 个不同的动画,在第一次完成后,使用 isAnimating
。
但是,我只看到第一个动画...
if anims[0] == 1
startAnimation(image : #imageLiteral(resourceName: "first"))
if anims[1] == 2
while myView.isAnimating
RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.05))
startAnimation(image : #imageLiteral(resourceName: "second") , time : Int)
spriteSheet 裁剪后返回 UIImage 数组..
func startAnimation(image : UIImage , time : Int)
myView.animationImages = image.spriteSheet(cols: 19, rows: 1)
myView.animationDuration = 1
myView.animationRepeatCount = time
myView.startAnimating()
【问题讨论】:
请查看更新后的答案:) 【参考方案1】:你总是可以像
这样链接动画 UIView.animate(withDuration: 1, animations:
//do your animation here
) (state) in
UIView.animate(withDuration: 1, animations:
//do your second animation
)
如果您使用的是 CABasicAnimations,那么您可以使用 beginTime 和 duration 将它们链接起来 :)
var totalDuration = 0
let baseicAnim1 = CABasicAnimation()
baseicAnim1.beginTime = CACurrentMediaTime()
totalDuration += 10
baseicAnim1.duration = CFTimeInterval(totalDuration)
let basicAnim2 = CABasicAnimation()
basicAnim2.beginTime = CACurrentMediaTime() + CFTimeInterval(totalDuration)
totalDuration += 10
basicAnim2.duration = CFTimeInterval(totalDuration)
编辑
使用 while 循环继续检查动画是否已完成执行从来都不是建议的方法
编辑:
试试这个,
func startAnimation(image : UIImage , time : Int,completionBlock : (()->())?)
let animationDuration = 1
myView.animationImages = image.spriteSheet(cols: 19, rows: 1)
myView.animationDuration = animationDuration
myView.animationRepeatCount = time
myView.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + animationDuration, execute:
if let block = completionBlock
block()
)
现在您的 startAnimation 函数将完成块作为其参数,并在 animationDuration 之后执行完成块。所以你可以知道动画什么时候结束:)
链接只需调用
self.startAnimation(image: #imageLiteral(resourceName: "first"), time: 1)
self.startAnimation(image: #imageLiteral(resourceName: "second"), time: 1, completionBlock: nil)
希望对你有帮助
【讨论】:
我使用的是UIImageView
,而不是UIView
。我的方法startAnimation()
使用animationImages 循环遍历
@marry-g : 在 startAnimation() 中显示你的代码那到底在做什么?
已添加,请立即查看
重点是,两个动画不一定一个接一个。我有条件,if anims[0] == 1 startAnimation... if anims[1] == 2 ...
他们不一定会在一起.. 还有.now() + animationDuration
表达式的类型在没有更多上下文的情况下是模棱两可的以上是关于UIImageView 等待动画完成的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView 的 startAnimating 会在动画完成后自行移除吗?
当动画 UIImage 被分配两次时,UITableViewCell 中的 UIImageView 没有动画