我有一个包含图像数组的滚动视图,我想对其进行动画处理,使图像从右向左变化。我的scrollView:
@IBOutlet weak var scrollView: UIScrollView!
var imageArray = [UIImage]()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.frame = view.frame
imageArray = [UIImage(named:"image3")!,UIImage(named:"image4")!,UIImage(named:"image1")!]
for i in 0..<imageArray.count{
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.image = imageArray[i]
let xPosition = self.view.frame.width * CGFloat(i)
imageView.frame = CGRect(x: xPosition, y: 0, width: self.scrollView.frame.width, height: 205)
scrollView.contentSize.width = scrollView.frame.width * CGFloat(i + 1)
scrollView.addSubview(imageView)
}
startAnimating()
}
对于动画,我用:
func startAnimating() {
UIView.animateKeyframes(withDuration: 2, delay: 0, options: .repeat, animations: {
self.scrollView.center.x += self.view.bounds.width
}, completion: nil)
}
但是,它是从左向右移动,而不是从右向左移动,而且它没有改变图像...我该怎么办?任何指导深表感谢!谢谢
答案 0 :(得分:2)
您要在其父视图中移动滚动视图。图像视图是滚动视图的子视图(它们在滚动视图内部),因此它们只是随其移动。
要滚动UIScrollView中的内容 ,您应该使用它的contentOffset属性:
var newOffset = scrollView.contentOffset
newOffset.x += scrollView.frame.size.width
UIView.animate(withDuration: 2, delay: 0, options, .repeat, animations: {
self.scrollView.contentOffset = newOffset
})
此外,您不应为此使用animateKeyFrames
。请改用animate(withDuration:delay:options:animations)
方法。
值得考虑的是UIScrollView在这里是否是正确的选择,这实际上取决于要放到其中的图像数量。
如果总是要有少量图像,那么滚动视图是个不错的选择。
但是,如果要显示的图像数量更多,那么UICollectionView将是一个更好的选择,因为它可以重用其子视图。