diff --git a/Sources/FSPageViewLayout.swift b/Sources/FSPageViewLayout.swift index cf3bb19..e2c4071 100644 --- a/Sources/FSPageViewLayout.swift +++ b/Sources/FSPageViewLayout.swift @@ -189,7 +189,7 @@ class FSPagerViewLayout: UICollectionViewLayout { internal func frame(for indexPath: IndexPath) -> CGRect { let numberOfItems = self.numberOfItems*indexPath.section + indexPath.item let originX = self.leadingSpacing + CGFloat(numberOfItems)*self.itemSpan - let originY = (self.collectionView!.frame.height-self.actualItemSize.height) + let originY = (self.collectionView!.frame.height-self.actualItemSize.height)/2.0 let origin = CGPoint(x: originX, y: originY) let frame = CGRect(origin: origin, size: self.actualItemSize) return frame @@ -231,6 +231,7 @@ class FSPagerViewLayout: UICollectionViewLayout { return } let ruler = collectionView.bounds.midX + attributes.center.x = self.frame(for: attributes.indexPath).midX attributes.position = (attributes.center.x-ruler)/self.itemSpan attributes.interitemSpacing = self.actualInteritemSpacing transformer.applyTransform(to: attributes) diff --git a/Sources/FSPageViewTransformer.swift b/Sources/FSPageViewTransformer.swift index 6c54388..8138a27 100644 --- a/Sources/FSPageViewTransformer.swift +++ b/Sources/FSPageViewTransformer.swift @@ -174,9 +174,16 @@ open class FSPagerViewTransformer: NSObject { attributes.transform = transform attributes.zIndex = zIndex case .cubic: - var pivot: CGPoint = CGPoint(x: 0.5, y: 0.5) - pivot.x = position < 0 ? 1 : 0 - pivot.y = 0.5 + let direction: CGFloat = position < 0 ? 1 : -1 + let theta = position * CGFloat(M_PI_2) + let width = attributes.bounds.width + // ForwardX -> RotateY -> BackwardX + attributes.center.x += direction*width*0.5 // ForwardX + var transform3D = CATransform3DIdentity + transform3D.m34 = -0.002 + transform3D = CATransform3DRotate(transform3D, theta, 0, 1, 0) // RotateY + transform3D = CATransform3DTranslate(transform3D,-direction*width*0.5, 0, 0) // BackwardX + attributes.transform3D = transform3D switch position { case -1...1: attributes.alpha = 1 @@ -185,8 +192,6 @@ open class FSPagerViewTransformer: NSObject { attributes.zIndex = 0 attributes.alpha = 0 } - attributes.pivot = pivot - attributes.rotationY = position * CGFloat(M_PI_2) } } diff --git a/Sources/FSPagerViewCell.swift b/Sources/FSPagerViewCell.swift index 69393ac..d331786 100644 --- a/Sources/FSPagerViewCell.swift +++ b/Sources/FSPagerViewCell.swift @@ -136,20 +136,4 @@ open class FSPagerViewCell: UICollectionViewCell { } } - open override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) { - super.apply(layoutAttributes) - let layoutAttributes = layoutAttributes as! FSPagerViewLayoutAttributes - self.contentView.layer.anchorPoint = CGPoint(x: 0.5, y: 0.5) - self.contentView.layer.transform = CATransform3DIdentity - guard layoutAttributes.rotationY != 0 else { - return - } - self.layer.transform = CATransform3DIdentity - var rotation = CATransform3DIdentity - rotation.m34 = -0.002 - rotation = CATransform3DRotate(rotation, layoutAttributes.rotationY, 0, 1, 0) - self.contentView.layer.anchorPoint = layoutAttributes.pivot - self.contentView.layer.transform = rotation - } - } diff --git a/Sources/FSPagerViewLayoutAttributes.swift b/Sources/FSPagerViewLayoutAttributes.swift index 7d6f6ef..06b4396 100644 --- a/Sources/FSPagerViewLayoutAttributes.swift +++ b/Sources/FSPagerViewLayoutAttributes.swift @@ -9,9 +9,7 @@ import UIKit open class FSPagerViewLayoutAttributes: UICollectionViewLayoutAttributes { - - open var rotationY: CGFloat = 0 - open var pivot = CGPoint(x:0.5, y:0.5) + open var position: CGFloat = 0 open var interitemSpacing: CGFloat = 0 @@ -20,8 +18,6 @@ open class FSPagerViewLayoutAttributes: UICollectionViewLayoutAttributes { return false } var isEqual = super.isEqual(object) - isEqual = isEqual && (self.rotationY == object.rotationY) - isEqual = isEqual && (self.pivot == object.pivot) isEqual = isEqual && (self.position == object.position) isEqual = isEqual && (self.interitemSpacing == object.interitemSpacing) return isEqual @@ -29,8 +25,6 @@ open class FSPagerViewLayoutAttributes: UICollectionViewLayoutAttributes { open override func copy(with zone: NSZone? = nil) -> Any { let copy = super.copy(with: zone) as! FSPagerViewLayoutAttributes - copy.rotationY = self.rotationY - copy.pivot = self.pivot copy.position = self.position copy.interitemSpacing = self.interitemSpacing return copy