Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private var layoutCircleFrame = CGRect.zero
- private let layoutInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
- private let itemSize = CGSize(width: 100, height: 100)
- private var itemLayoutAttributes = [UICollectionViewLayoutAttributes]()
- override func prepare() {
- super.prepare()
- guard let collectionView = collectionView else { return }
- itemLayoutAttributes.removeAll()
- layoutCircleFrame = CGRect(origin: .zero, size: collectionViewContentSize)
- .inset(by: layoutInsets)
- .insetBy(dx: itemSize.width / 2.0, dy: itemSize.height / 2.0)
- .offsetBy(dx: collectionView.contentOffset.x, dy: collectionView.contentOffset.y)
- .insetBy(dx: -collectionView.contentOffset.x, dy: -collectionView.contentOffset.y)
- for section in 0..<collectionView.numberOfSections {
- switch section {
- case 0:
- let itemCount = collectionView.numberOfItems(inSection: section)
- itemLayoutAttributes = (0..<itemCount).map({ (index) -> UICollectionViewLayoutAttributes in
- let angleStep: CGFloat = 2.0 * CGFloat.pi / CGFloat(itemCount)
- var position = layoutCircleFrame.center
- position.x += layoutCircleFrame.size.innerRadius * cos(angleStep * CGFloat(index))
- position.y += layoutCircleFrame.size.innerRadius * sin(angleStep * CGFloat(index))
- let indexPath = IndexPath(item: index, section: section)
- let attributes = UICollectionViewLayoutAttributes(forCellWith: indexPath)
- attributes.frame = CGRect(center: position, size: itemSize)
- return attributes
- })
- default:
- fatalError("Unhandled section \(section).")
- }
- }
- }
Add Comment
Please, Sign In to add comment