Subclass UICollectionViewFlowLayout
và ghi đè lên các phương pháp layoutAttributesForElementsInRect:
để gắn kết của bạn UICollectionViewCells
:
-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray* array = [super layoutAttributesForElementsInRect:rect];
CGRect visibleRect;
visibleRect.origin = self.collectionView.contentOffset;
visibleRect.size = self.collectionView.bounds.size;
for(UICollectionViewLayoutAttributes* attributes in array) {
if(CGRectIntersectsRect(attributes.frame, rect)){
CGFloat d = UIInterfaceOrientationIsPortrait(_orientation)?
CGRectGetMidY(visibleRect)-attributes.center.y :
CGRectGetMidX(visibleRect)-attributes.center.x;
CGFloat w = visibleRect.size.width;
CGFloat h = visibleRect.size.height;
CGFloat dRatio = UIInterfaceOrientationIsPortrait(_orientation)? d/(h/2) : d/(w/2);
CGFloat angle = MAX_ANGLE*dRatio; // an angle between 0 and MAX_ANGLE based on proximity to center
CGFloat radians = DEGREES_TO_RADIANS(angle);
debug = 0;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = PERSPECTIVE;
rotationAndPerspectiveTransform = UIInterfaceOrientationIsPortrait(_orientation)?
CATransform3DRotate(rotationAndPerspectiveTransform, radians, 1.0f, 0.0f, 0.0f) :
CATransform3DRotate(rotationAndPerspectiveTransform, radians, 0.0f, 1.0f, 0.0f);
attributes.transform3D = rotationAndPerspectiveTransform;
}
}
return array;
}
Tôi đã không thay đổi nội dung mã này cho bạn và có tham chiếu đến các macro và các biến Ví dụ, do đó bạn sẽ cần phải tinh chỉnh nó để làm những gì bạn muốn. Điều này đã được sử dụng để tạo bố cục kiểu bìa nhưng các nguyên tắc sẽ giống nhau cho bạn nhưng không có doanh nghiệp 3D. Bạn cần đặt phần inset để đảm bảo một hàng hoặc cột trong luồng của bạn.
Nguồn
2013-03-12 15:16:56
phải đối mặt với cùng một vấn đề, bạn có thể cung cấp một số mã không? –
@ kirtimali Tôi chỉ viết một UIView tùy chỉnh vì tôi cần một mạng lưới với mọi mục có cùng kích thước. Chỉ là một vài trang mã. Không thể chia sẻ nó mặc dù, xin lỗi. – jjxtra