Subclass UICollectionViewFlowLayout
und außer Kraft setzen, die layoutAttributesForElementsInRect:
Methode auszurichten Ihre 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;
}
ich nicht diesen Code für Sie bearbeitet haben, und es gibt Hinweise auf Makros und Instanzvariablen, so dass Sie es zwicken bräuchten zu Tun Sie, was Sie wollen. Dies wurde verwendet, um ein Coverflow-Layout zu erstellen, aber die Prinzipien werden für Sie die gleichen sein, aber ohne das 3D-Geschäft. Sie müssen den Abschnittseinsatz festlegen, um eine einzelne Zeile oder Spalte in Ihrem Flow zu garantieren.
vor demselben Problem können Sie einige Code zur Verfügung stellen? –
@kirtimali Ich habe gerade eine benutzerdefinierte UIView geschrieben, da ich ein Raster mit jedem Element der gleichen Größe brauchte. War nur ein paar Seiten Code. Kann es aber nicht teilen, sorry. – jjxtra