如何为ScrollView Swift

时间:2018-08-20 12:21:18

标签: ios swift uiscrollview

我有一个包含图像数组的滚动视图,我想对其进行动画处理,使图像从右向左变化。我的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)
}

但是,它是从左向右移动,而不是从右向左移动,而且它没有改变图像...我该怎么办?任何指导深表感谢!谢谢

1 个答案:

答案 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将是一个更好的选择,因为它可以重用其子视图。