我尝试让我的UIImageView(self.posterImageview
)使用以下代码循环播放一组带有动画的UIImages:
func animatePoster (imageArray: [UIImage], count: Int = 0)
{
UIView.transitionWithView
(
self.posterImageview,
duration: 2,
options: UIViewAnimationOptions.TransitionFlipFromBottom,
animations:
{
self.posterImageview.image = imageArray[count]
},
completion:
{
finished in
if (count == imageArray.count - 1) // Last image
{
self.animatePoster(imageArray)
}
else
{
self.animatePoster(imageArray, count: count + 1)
}
}
)
}
然而,似乎完成块不起作用,我想象它应该如何。现在,它在所有图像中反复闪烁,而不允许播放完整的动画,然后再转到下一个。增加动画的持续时间没有帮助,当我对递归设置限制时(例如,当我到达最终图像时结束),然后所有图像都会快速循环,除了最后一个正确动画的动画。
任何见解都表示赞赏。
答案 0 :(得分:0)
我对show cEmp dAmnt iAdv
----------- ------------- ----------- -----------
1001 300.000 100.000 1
1001 200.000 50.000 2
1001 150.000 200.000 3
1001 0.000 50.000 3
1001 0.000 60.000 4
1002 1000.000 200.000 1
1002 800.000 500.000 2
1002 300.000 100.000 3
1002 200.000 100.000 4
做了一些不同的更改。请检查可能对您有所帮助。
现在我添加了假animation
。
code
答案 1 :(得分:0)
看起来你的观点有些困难。
为了便于理解,请将此代码放在游乐场中。 要放置图片,只需拖放内部。
import UIKit
import XCPlayground
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 320, height: 240))
XCPlaygroundPage.currentPage.liveView = imageView // show layer in Playground timeline, don't forget to open right panel
func animate(images: [UIImage], index: Int = 0) {
UIView.transitionWithView(imageView, duration: 2, options: .TransitionFlipFromBottom, animations: {
imageView.image = images[index]
}, completion: { value in
let idx = index == images.count-1 ? 0 : index+1
animate(images, index: idx)
})
}
animate([UIImage(imageLiteral: "1.png"), UIImage(imageLiteral: "2.png"), UIImage(imageLiteral: "3.png")])
答案 2 :(得分:0)
主帖上的评论会引发有趣的地方。我建议您检查完成的参数,如chrisco所示。如果已完成NO
,则完成处理程序在完成之前被调用的最可能原因是因为动画被取消 - 通常是因为另一个已被启动。是否有可能在第一个动画以某种方式完成之前触发第二个动画?我在您当前的代码中看不到,但是......我们无法看到您代码中的其他元素。
答案 3 :(得分:0)
从@ dimpiax的回答中创建了扩展
以下是代码:
extension UIImageView {
func animate(images: [UIImage], index: Int = 0, completionHandler: (() -> Void)?) {
UIView.transition(with: self, duration: 0.5, options: .transitionCrossDissolve, animations: {
self.image = images[index]
}, completion: { value in
let idx = index == images.count-1 ? 0 : index+1
if idx == 0 {
completionHandler!()
} else {
self.animate(images: images, index: idx, completionHandler: completionHandler)
}
})
}
}