3

現在、UITableViewControllerに取り組んでいます。UITableViewのセルには、Webサービスからのリアルタイムデータが表示されます。基になるデータ項目の1つが更新されたとき(2分ごとに1回程度)、セルを短時間「フラッシュ」させて、ユーザーがそのセルのデータが更新されたことを理解できるようにします。

今まで、私はこのコードを使用しました:

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
{
    cell.contentView.backgroundColor = flashColor;
} completion:^(BOOL finished)
{
    [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
    {
        cell.contentView.backgroundColor = [UIColor clearColor];
    } completion: NULL];
}];

これは、ユーザーが特定のセルのデータを「内部を見る」方法を提供し、開示インジケーターを追加するまで、うまく機能しました。コンテンツ領域はフレームワークによって縮小されてディスクロージャーインジケーター用のスペースが確保されるため、フラッシュはセルの左側の90%のみを強調表示しますが、ディスクロージャーインジケーターの背景色は変更されません。

cell.accessoryView.backgroundColor = flashColor;

cell.backgroundView.backgroundColor = flashColor;

アニメーションの修正には役立ちません。

について読んだ- (void) setHighlighted: (BOOL)highlighted animated: (BOOL)animatedことがありますが、フラッシュが飛散しないようにする厄介なエラーが発生しやすいコードを大量に記述しない限り、フラッシュの直後に強調表示された状態に戻ることはありません。また、アニメーション自体を制御することはできません。

アクセサリビューが存在する状態で古いアニメーション効果を維持する方法はありますか、それともハイライト方法を使用してフラッシュを開始する必要がありますか?

よろしく、クリス

4

1 に答える 1

6
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
{
    [cell setHighlighted:YES animated:YES];
} completion:^(BOOL finished)
{
    [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveEaseInOut animations:^
    {
        [cell setHighlighted:NO animated:YES];
    } completion: NULL];
}];

セルはanimateWithDurationパラメーターで設定された時間を無視し、常に iOS の既定値である 0.2 秒を使用することに注意してください。したがって、そのパラメータを 0.2 に設定することをお勧めします。

解決策は簡単ですが、もちろん元のアニメーションを保持することはできませんでした (高速ハイライトと低速フェードアウト)。一方で、これはおそらくより保守的で将来性のある方法です。

David Rönnqvist に感謝します。

クリス

于 2012-05-25T10:59:22.180 に答える