2

UICollectionView의 Coverflow 스타일 레이아웃에서 작업하고 있습니다. 그것의 간단하고 충분한 개념, 그리고 단지 그것을 쉽게 만들기 위해 주제에 대한 약 100 자습서가 있습니다. 그러나 변환을하는 사람이 알고있는 것처럼 m34은 마법의 숫자입니다. 그러나 내 회전에 대한 관점을 얻기 위해 설정하자마자보기가 사라집니다.UICollectionViewFlowLayout 사라지는 셀을 초래하는 transform.m34의 하위 클래스

나는이 문제가 bounds/zIndex 문제라고 생각하지만, zIndexes로 원숭이를 돌리고 조정을 클리핑 한 후에 셀은 그냥 나타나기를 거부합니다. 어떤 도움이 크게 감사합니다.

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSArray *array = [super layoutAttributesForElementsInRect:rect]; 

    CGRect visibleRect = (CGRect){self.collectionView.contentOffset, self.collectionView.bounds.size}; 

    CGFloat maxDistance = visibleRect.size.width/2.0; 
    CGFloat maxRotation = M_PI_2; 

    [array enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes * attributes, NSUInteger idx, BOOL *stop) { 

     CGFloat distanceFromCenter = CGRectGetMidX(visibleRect) - attributes.center.x; 

     CGFloat percentageFromCenter = distanceFromCenter/maxDistance; 
     percentageFromCenter = MIN(percentageFromCenter, 1.0); 
     percentageFromCenter = MAX(percentageFromCenter, -1.0); 

     CGFloat angle = percentageFromCenter * maxRotation; 

     CATransform3D transform = CATransform3DIdentity; 
//  transform.m34 = 1.0/-800.0; 
     transform = CATransform3DRotate(transform, angle, 0.0, 1.0, 0.0); 

     attributes.transform3D = transform; 
    }]; 

    return array; 
} 

답변

3

트위터의 @mpospese 덕분에. 문제는 m34 값 자체가 아닙니다. 그것은 UICollectionView이라는 특별한 특징을 가지고있었습니다. 프레임 높이가 수집 뷰의 높이를 초과

가, 세포 내 경우에 따라서

을 제거 나는 특별히 UICollectionViewheight 잡아 세포의 높이에 사용할 수 있도록 설계된 UICollectionViewLayout했다. 문제는, m34을 고려하면 분명히 프레임이 조정되어 경계를 초과 할 때입니다. 대부분의 UIView 작업과 같이 셀을 클리핑하는 것보다는 문제를 직접 가리 키기 만하면됩니다. UICollectionView은 바깥 쪽 경계를 브러쉬로 처리하는 경우 셀을 완전히 자동으로 제거합니다.