我正在为swift工作4个月,并在2周后开始使用这个启动画面。屏幕中间有车,2个图像(城市和地形)从右到左(RtoL)循环移动作为背景。检查以下从我的Android应用程序中获取的gif:
我只能移动背景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。
谢谢:)
答案 0 :(得分:7)
因此,就像您必须移动背景但要使其看起来好像汽车在移动一样,因此对于这种情况: 您必须制作3个不同的imageViews
要从 LToR 或 RToL 中移动的图像,您必须将图像视图加倍,以便可以附加同一图像(作为另一个实例)图片的右边缘到达屏幕的右边缘时,将其移至第一个的结尾
并出于动画目的添加此代码。
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)
}
}
希望有所帮助