2

Sony Xperia で提供されているギャラリー アプリの機能を iPhone アプリで模倣したい。I ギャラリー アプリでは、画像は日付ごとにグループ化されたグリッドに表示され、セクションの最初の写真は他の写真の 2 倍のサイズになっています。ピンチアウト/ピンチインすると、すべての写真がズームアウト/インします。

ここに画像の説明を入力

Lithu TV の提案に従って PSTCollectionView を使用し、カスタム レイアウトを作成しました。そのレイアウトでは、 をオーバーライドし- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rectました。以下は同じコードです。

// called continuously as the rect changes
 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
 NSArray *attribs = [super layoutAttributesForElementsInRect:rect];

 NSMutableArray *arrmFrames=nil;
 for (int i=0;i<attribs.count;i++) {

     UICollectionViewLayoutAttributes *attributesInitial=[attribs objectAtIndex:0];

     UICollectionViewLayoutAttributes *attributes=[attribs objectAtIndex:i];

     //Take initial frame from first cell
     if(i==0)
    fFirstCellsY = attributes.frame.origin.y;

     //while Y is constant, save the adjusted frames for next cells
     else if(attributes.frame.origin.y<fFirstCellsY+attributesInitial.frame.size.height)
     {
      if(arrmFrames==nil)
          arrmFrames=[[NSMutableArray alloc]init];

         attributes.frame=CGRectMake(attributes.frame.origin.x, attributesInitial.frame.origin.y, attributes.frame.size.width, attributes.frame.size.height);
         [arrmFrames addObject:NSStringFromCGRect(CGRectMake(attributes.frame.origin.x, attributes.frame.origin.y+attributes.frame.size.height+10, attributes.frame.size.width, attributes.frame.size.height))];
     }

     //Adjust the frame of other cells
     else
     {
         CGRect frame = attributes.frame;
         attributes.frame=CGRectFromString((NSString*)[arrmFrames objectAtIndex:0]);
         [arrmFrames removeObjectAtIndex:0];
         [arrmFrames addObject:NSStringFromCGRect(frame)];
     }

 }

 }

return attribs;
}

これは機能し、レイアウトは私が望んでいたように見えます。この方法により、デフォルトのレイアウトを使用した場合よりも多くのセルが表示され、私のレイアウトは問題なく表示されます。しかし、下にスクロールすると、目に見えるセルがリロードされます。その理由は、カスタム レイアウトにある前にデリゲート メソッド- (PSUICollectionViewCell *)collectionView:(PSUICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPathが呼び出されているためだと思います。- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rectそのため、デフォルト レイアウトでは表示されないが、カスタム レイアウトでは表示されるセルは、後でリロードされます。

どうすればこれを克服できますか?

4

1 に答える 1

1

UICollectionViewを使用します アプリが 5.0 未満でサポートする必要がある場合は、PSTCollectionViewを使用します

素敵なスタートアップ

于 2013-07-29T06:38:52.260 に答える