0

セル内に画像を含む単純なコレクション ビューを実装しています。私が達成したいタスクは、ユーザーがセルをタップしたときです-フリップアニメーションが必要で、同じセルにいくつかの詳細が表示される必要があります。

たとえば、セルの 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];
    }
}

一時的な解決策としてはかなり良い..誰かより良いアドバイスがありますか?

4

1 に答える 1

2

スクロールすると、「古いセル」が再利用されます。これにより、テーブル ビューのパフォーマンスが向上します。もちろん、問題のセルに遷移したビューがある場合は、代わりにそのビューが表示されます。

したがって、関数の呼び出しごとに新たに設定するセル内のデータと同様にcellForItemAtIndexPath、適切なビューを表示するように設定する必要があります。データの場合と同様にセルのビューの状態を覚えてから、それに応じたビューを表示します。セルが提示されたとき。

于 2013-05-03T07:13:49.780 に答える