CollectionView自定义风火轮 layout (一)

477 查看

最终效果如下所示:

demo.gif

这个效果是我们公司的一个模块的效果, 当时没有由于没有对 collectionView 仔细研究,所以对这个界面的实现机制并不是很熟悉, 到现在已经有段时间了, 这段时间对 collectionView 也加深了解了一些, 于是试着自己写一下试试(当时使我们公司一个大牛写的)

我打算分一下几步来实现这个效果:

  1. 实现圆形布局(这个布局效果在 Apple 的实例代码中有, 具体代码请自行 Google)
  2. 实现圆形的风火轮效果
  3. 对有些需要隐藏的位置进行隐藏

环形布局之前Apple 提供的代码中是直接根据角度计算的每个 Item 的位置, 我们也用同样的思考, 不同的是我们要将角度记录下来, 这个角度是跟 collectionView 的 contentOffset 有关的, 因为当用户在滑动的时候, contentOffset 在更新,这个时候应该重新根据 contentOffset 计算每个 Item 的角度 — 在心中有个印象

  1. 创建自定义布局

定义好半径大小之后, 我们还需要个属性 相邻两个 Item之间的夹角是多少度于是我们在 extension 中定义 anglePerItem属性, 存储夹角, 并在 initial 中做初始化

我们之前说过, 每个 Item 要有一个 angle, 用来确定在 contentOffset 时, 对应的 item 的角度是多少, 所以这个时候我们需要自定义 LayoutAttributes

自定义 LayoutAttributes