图像移动循环动画 - 斯威夫特

时间:2016-12-28 09:08:23

标签: ios iphone swift xcode

我正在为swift工作4个月,并在2周后开始使用这个启动画面。屏幕中间有车,2个图像(城市和地形)从右到左(RtoL)循环移动作为背景。检查以下从我的Android应用程序中获取的gif:

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

我唯一的要求就是像上面的gif一样在循环中移动图像RtoL。

谢谢:)

2 个答案:

答案 0 :(得分:7)

因此,就像您必须移动背景但要使其看起来好像汽车在移动一样,因此对于这种情况: 您必须制作3个不同的imageViews

  1. 关于建筑背景
  2. 对于树木背景
  3. 汽车。

就像我创建了这个动画一样。 enter image description here

要从 LToR RToL 中移动的图像,您必须将图像视图加倍,以便可以附加同一图像(作为另一个实例)图片的右边缘到达屏幕的右边缘时,将其移至第一个的结尾

如下图所示。 enter image description here

并出于动画目的添加此代码。

func animateBackground() {

    // Animate background
    // cityImage is the visible image
    // cityImage2 is the hidden image

    UIView.animate(withDuration: 12.0, delay: 0.0, options: [.repeat, .curveLinear], animations: {
        self.cityImage.frame = self.cityImage.frame.offsetBy(dx: -1 * self.cityImage.frame.size.width, dy: 0.0)
        self.cityImage2.frame = self.cityImage2.frame.offsetBy(dx: -1 * self.cityImage2.frame.size.width, dy: 0.0)
    }, completion: nil)

}

答案 1 :(得分: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)
    }
}

希望有所帮助