2016-12-28 37 views
1

我正在swift上工作过去4个月,并在这个初始屏幕上工作了2周。在屏幕中间有汽车和2个图像(城市&地形)作为背景从右向左(RtoL)循环移动。检查下面从我的Android应用程序所采取的gif:图像在循环动画中移动 - Swift

Taken from my Android app

我只能够移动背景RTOL但只有一次。我尝试过其他动画选项,但似乎没有任何工作。你可以看到这些图像比实际屏幕宽得多,所以不应该有任何问题。检查我的方法如下:

func animate(_ image: UIImageView) { 
UIView.animate(withDuration: 1.0, delay: 0.0, options: [.curveLinear], 
animations: {image.center.x -= 10}, 
completion: {_ in self.animate(image)})} 

我唯一的要求是移动图像RTOL与循环如上面的GIF没有间隙。

谢谢:)

+0

如果GIF是你想要的,为什么不使用它呢?只需从gif获取图像并将它们添加到UIImageView.animationImages。然后将animationDuration设置为你想要的,并简单地调用imageView.StartAnimation。它会循环,直到你呼叫stopAnimation –

+0

你的想法是好的,但具有这种质量的gif会使它非常大,我的应用程序无法承受。 –

+0

那么也许你不得不在图像浏览上翻倍,这样当图像的右边缘到达屏幕的右边缘时,你可以将同一图像(作为另一个实例)追加到第一个图像的末尾。 –

回答

2

好像你只移动图像向左,很快图像将被移出屏幕,你将无法看到它。尝试在每次动画迭代后将图像重新设置回原始位置。你可以用CGAffineTransform做到像这样:

func animate(_ image: UIImageView) { 
    UIView.animate(withDuration: 5, delay: 0, options: .curveLinear, animations: { 
     image.transform = CGAffineTransform(translationX: -100, y: 0) 
    }) { (success: Bool) in 
     image.transform = CGAffineTransform.identity 
     animate(image) 
    } 
} 

希望帮助

+0

它没有工作:( 实际上,一个迭代是:屏幕左边缘的图像左端 - >屏幕右边缘的图像右端。重新设置迭代无助于创建完美的循环。 完成第一次迭代后'图像的左端应该在屏幕的右边缘'以使其完美循环。 –