0

コレクション ビューを使用して「カード」を表示しています。ユーザーがこれらのカードの 1 つをクリックすると、(didSelectItemAtIndexPath で呼び出される関数を介して) フリップ アニメーションでビューが変わります (反対側の「側」に)。ユーザーがこれらのカードの別の 1 つに触れた場合、別のカードをクリックすると、古いカードが古いビューに戻り、新しいカードが新しいビューにフリップします。または、元のカードをもう一度クリックして裏返すこともできます。

問題

これはうまく機能しますが、スクロール ビューでカードをスクロールすると、他のカードが反転しているように見えます。たとえば、コレクション ビュー (インデックス: 0) の最初のカードをめくります。これはうまく転がります。下にスクロールすると、インデックス 9 のセルが反転して表示されます。

私が試したこと

私は周りを見回しましたが、UICollectionView とスクロールに関連する問題がたくさんありますが、何が同じで何がそうでないのかわかりません。また、NSLog を使用して、ランダムに反転されたビュー カードが選択され、プログラムを介して反転されたかどうかを判断しました。彼らはただそうであるように見えます。

私はこれでアイデアに本当にこだわっています。誰かアイデアはありますか?セルの作成方法が原因ですか?私のviewDidLoadで私は使用しています:(cellImageはセルのカスタムクラスです)

[self.collectionView registerClass:[cellImage class] forCellWithReuseIdentifier:@"MY_CELL"];

そして私のcellForItemAtIndexPathで:

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; {
cellImage *cell = [cv dequeueReusableCellWithReuseIdentifier:@"MY_CELL" forIndexPath:indexPath];
cell.imageView.image = [UIImage imageNamed:[imageArray objectAtIndex:indexPath.item]];
[cell.label addSubview:cell.imageView];
cell.label.backgroundColor = [UIColor whiteColor];
cell.label.layer.borderColor =  [UIColor grayColor].CGColor;
cell.label.layer.borderWidth  = 1.0f;

return cell;
}

誰にもアイデアはありますか?さらにコードが必要な場合は、私に声をかけてください、ありがとう!

4

2 に答える 2

1

再利用可能なセルを構成する方法 ( cellForItemAtIndexPath) では、両方の状態を明示的に設定する必要があります。そうしないと、リサイクルされたセルはそれ自体を更新しません。

image = isFlipped ? backImage : cardImage;

配列内の任意のカードの現在の反転状態を確実に返すことができるデータ モデルが必要です。

于 2013-09-09T18:23:58.020 に答える
0

- (void)prepareForReuseカスタム UICollectionViewCellのメソッドをオーバーライドして、セルを再利用する前にデフォルトの状態に戻すことができます。

于 2013-09-09T18:25:37.740 に答える