如何在按钮按下时在集合视图中滚动(水平)?

Posted

技术标签:

【中文标题】如何在按钮按下时在集合视图中滚动(水平)?【英文标题】:how to Scroll(horizontally) in collection view on button press? 【发布时间】:2015-12-01 15:31:26 【问题描述】:

我有一个包含图像的集合视图。我想在按钮按下时执行滚动。我在谷歌上搜索过我发现只设置 contentoffset 但我想滚动动画(如果内容超出滚动区域,滚动应该反弹)。我添加了一个 image 来告诉你我到底要做什么,在图片有一个集合视图,两边的小箭头是按钮。

 @IBAction func moveScrollLeft(sender: UIButton) 
    UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: 
        self.imageCollectionView.contentOffset.x -= 50
        , completion: nil)
    print(imageCollectionView.contentOffset.x)


@IBAction func moveScrollRight(sender: UIButton) 
    UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: 
        self.imageCollectionView.contentOffset.x += 50
        , completion: nil)
    print(imageCollectionView.contentOffset.x)


【问题讨论】:

UICollectionView 是 UIScrollView 的子类。您可以使用 collectionView.setContentOffset(offset, animated:true)。关于反弹,您必须检查 contentOffset.x + bounds.width > contentSize.width 并为反弹设置动画。 【参考方案1】:

使用 UICollectionview 的 scrollToItemAtIndexPath(_:atScrollPosition:animated:) https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionView_class/#//apple_ref/occ/instm/UICollectionView/scrollToItemAtIndexPath:atScrollPosition:animated:

例如:

let indexPath = NSIndexPath(forRow: 3, inSection: 0)
imageCollectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .CenteredHorizontally, animated: true)

【讨论】:

【参考方案2】:

请检查此代码,我已修改您的代码:

@IBAction func moveScrollLeft(sender: UIButton) 

        self.imageCollectionView.contentOffset.x -= 50

    UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: 
        , completion: nil)
             self.view.layoutIfNeeded()

    print(imageCollectionView.contentOffset.x)


@IBAction func moveScrollRight(sender: UIButton) 

        self.imageCollectionView.contentOffset.x += 50

    UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: 
    self.view.layoutIfNeeded()

        , completion: nil)

    print(imageCollectionView.contentOffset.x)


【讨论】:

以上是关于如何在按钮按下时在集合视图中滚动(水平)?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 在按钮按下时无意滚动

使用 UIPageControl 在按钮按下时发送数据和更改页面

如何使按钮在 UIScrollView 内滚动?

SwiftUI,按下时如何更改视图(不使用按钮)颜色?

在 ScrollView 中按下时的中心元素

滚动浏览集合视图时重置按钮和标签