sottoclasse UICollectionViewFlowLayout
e l'override del metodo layoutAttributesForElementsInRect:
per allineare il 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;
}
Non hai modificato il codice per voi e ci sono riferimenti a macro e variabili di istanza in modo avresti bisogno di modificarlo per Fai quello che vuoi. Questo è stato usato per creare un layout di stile coverflow ma i principi saranno gli stessi per te ma senza il business 3D. È necessario impostare la sezione per garantire una singola riga o colonna nel flusso.
fonte
2013-03-12 15:16:56
fronte stesso problema è possibile fornire un po 'di codice? –
@kirtimali Ho appena scritto un UIView personalizzato poiché avevo bisogno di una griglia con ogni articolo della stessa dimensione. Erano solo poche pagine di codice. Non posso condividerlo, mi dispiace. – jjxtra