セル内に画像を含む単純なコレクション ビューを実装しています。私が達成したいタスクは、ユーザーがセルをタップしたときです-フリップアニメーションが必要で、同じセルにいくつかの詳細が表示される必要があります。
たとえば、セルの ContentView に 2 つのビューを追加しました。ユーザーがボタンを押すと、transitionToView メソッドが呼び出され、リストに 9 ~ 10 個を超える画像が含まれている場合を除いて、すべて正常に機能しました。dequeueReusableCellWithReuseIdentifier 関数をオフにすると、すべて正常に動作しましたが、iPhone4 などの古いデバイスでは、アプリケーションの動作が遅くなりました。
だから私が見つけた最良の解決策はこれです:
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{
UICollectionViewCell *cell1 = [cv dequeueReusableCellWithReuseIdentifier:kCellID3 forIndexPath:indexPath];enter code here
UIView *contents = [[UIView alloc]initWithFrame:cell1.bounds];
contents.layer.borderColor = [[UIColor colorWithRed:0.119 green:0.108 blue:0.222 alpha:1]CGColor];
contents.layer.borderWidth = 10.0f;
contents.backgroundColor = [UIColor yellowColor];
[cell1.contentView addSubview:contents];
UIView *backgroundView = [[UIView alloc]initWithFrame:cell1.bounds];
backgroundView.layer.borderColor = [[UIColor colorWithRed:0.529 green:0.808 blue:0.922 alpha:1]CGColor];
backgroundView.layer.borderWidth = 4.0f;
backgroundView.backgroundColor = [UIColor greenColor];
cell1.selectedBackgroundView = backgroundView;
[cell1 bringSubviewToFront:cell1.selectedBackgroundView];
return cell1;
}
しかし、セルが選択されたときのイベントにアニメーションを追加することは可能ですか?
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell1 = [collectionView cellForItemAtIndexPath:indexPath];
UIView *toSwitch = cell1.contentView;
[UIView transitionFromView:toSwitch toView:cell1.selectedBackgroundView duration:0.33 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
}
また、この試みは私の細胞を台無しにします - 1つ以上の細胞が裏返されると、他の細胞がそれをコピーし始めます..
だから私はアニメーションが必要です(私が達成したこと)が、他の UICollectionView セルを一意に保つ必要があり、この反転したビューを再利用しないでください..
助けてください!:)これについて本当に必死です!
前もって感謝します
いくつかの解決策:
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
if(cell.selected)
{
[cell setSelected:NO];
[collectionView deselectItemAtIndexPath:indexPath animated:NO];
UIView *toSwitch = cell.contentView;
[UIView transitionFromView:cell.selectedBackgroundView toView:toSwitch duration:0.001 options:UIViewAnimationOptionCurveLinear |UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
}
}
一時的な解決策としてはかなり良い..誰かより良いアドバイスがありますか?