Swift Carousel收集视图POD

时间:2017-02-07 23:37:44

标签: ios swift carousel

所以我试图实现这样的目标:

enter image description here

我可以向左和向右滑动的旋转木马,但我不知道如何实现这一点,我现在有一个集合视图,所有设置都是水平滚动。

还有其他办法吗?是否有POD或我可以使用的东西?它不需要使用我刚刚使用它测试的集合视图。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

Swift 3

extension UICollectionView {

var centerPoint : CGPoint {

    get {

        return CGPoint(x: self.center.x + self.contentOffset.x, y: self.center.y + self.contentOffset.y);
    }
}

var centerCellIndexPath: IndexPath? {

    if let centerIndexPath = self.indexPathForItem(at: self.centerPoint) {

        return centerIndexPath
    }

    return nil
 }
}

使用项目单元格制作Curosel

func curosel() {

    if myCollectionView.centerCellIndexPath != nil {

        var index = (myCollectionView.centerCellIndexPath?.row)!

        if  myCollectionView.centerCellIndexPath! == IndexPath(item: 0, section: 0) {

            myCollectionView.cellForItem(at: myCollectionView.centerCellIndexPath!)?.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)

            index += 1

            myCollectionView.cellForItem(at: IndexPath(item: index, section: 0))?.transform = CGAffineTransform.identity

        } else {

            myCollectionView.cellForItem(at: myCollectionView.centerCellIndexPath!)?.transform = CGAffineTransform(scaleX: 1.2, y: 1.2)
            index -= 1
            myCollectionView.cellForItem(at: IndexPath(item: index, section: 0))?.transform = CGAffineTransform.identity
            index += 2
            myCollectionView.cellForItem(at: IndexPath(item: index, section: 0))?.transform = CGAffineTransform.identity
        }
        myCollectionView.scrollToItem(at:IndexPath(item: index-1, section: 0), at: .centeredHorizontally, animated: true)
     }
  }
}

答案 1 :(得分:1)

我使用的一个很棒的吊舱叫做“ CollectionViewPagingLayout”,非常简单

  1. 在此处安装吊舱(https://github.com/amirdew/CollectionViewPagingLayout#installation
  2. 创建一个自定义单元格类。导入CollectionViewPagingLayout并符合可转换视图。然后遵循协议存根(转换)并根据需要自定义轮播:
import UIKit
import CollectionViewPagingLayout

class MyCustomCell: UICollectionViewCell, TransformableView {

  func transform(progress: CGFloat) {
     //customize it however you want
  }
}
  1. 如果您不想自定义自己的内容,可以使用他提供的3个预设选项。只需将“ TransformableView”更改为“ StackTransformView”,“ SnaphotTransformView”或“ ScaleTransformView”。然后,用他的预设变量之一替换转换函数,如下所示:
import UIKit
import CollectionViewPagingLayout

class MyCustomCell: UICollectionViewCell, ScaleTransformView {

    var scaleOptions = ScaleTransformViewOptions(
        minScale: 0.6,
        scaleRatio: 0.4,
        translationRatio: CGPoint(x: 0.66, y: 0.2),
        maxTranslationRatio: CGPoint(x: 2, y: 0),
    )
}
  1. 现在转到您的ViewController(带有collectionView)并导入collectionViewpaginglayout。然后创建一个符合CollectionViewPagingLayout的布局常量。最后,在加载视图的情况下,将您的collectionView连接到布局类,如下所示:
import UIKit
import CollectionViewPagingLayout

class viewController: UIViewController {

//Outlets
@IBOutlet var myCollectionView: UICollectionView!

//Variables
let layout = CollectionViewPagingLayout()

//View did load
override func viewDidLoad() {
        super.viewDidLoad()
     //collectionViewPagingLayout setup
      layout.delegate = self
      myCollectionView.collectionViewLayout = layout
      myCollectionView.isPagingEnabled = true
}

}
  1. 设置您的收藏集查看您通常如何处理委托等。你们都准备好了。您可以使用它提供的布局委托方法来做一些事情,例如更改页面或计算您所在的数字页面。
extension ViewController: CollectionViewPagingLayoutDelegate {
    
    func onCurrentPageChanged(layout: CollectionViewPagingLayout, currentPage: Int) {
       print(currentPage)
    }
}
  • 注1-设置自定义collectionView单元(在情节提要板或笔尖中)时,将约束水平添加为在容器中水平居中并在容器中垂直居中,否则将不会显示其他2个单元格在偷看。
  • 注2-您可以将可见项的数量设置为一个int,以便它不会一次加载所有单元格(这在github页上有更好的说明)。例如: layout.numberOfVisibleItems = 3,您可以将其放入viewdidload()