0

UIView選択時にUITableViewCellフェードインしようとしています。xib ファイルで、ビューopacityYES、およびalphaに設定しました0.4

で、(そしてこれcellForRowAtIndexPathも に入れてみましたdidSelectRowAtIndexPath)私は持っています:

CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
fadeAnim.duration = 1.0;
[cell.shade.layer addAnimation:fadeAnim forKey:@"opacity"];

セルが画面に表示されると、黒 (不透明な 1.0) になり、0.0 にフェードしてから 0.4 にジャンプします。タップしたときにセルの不透明度を変更したいだけです。

didSelectRowAtIndexPath、私は持っています:

if (cell.shade.layer.opacity > 0.5) {
    [cell.shade.layer setOpacity:0.0];
} else {
    [cell.shade.layer setOpacity:1.0]; 
} 

の最初の行でブレークするとdidSelectRowAtIndexPath、 を実行するpo cell.shade.layer.opacityと、LLVM はそれが であると通知します0.4。を実行[cell.shade.layer setOpacity:1.0]した後も、まだ0.4です。xib alpha プロパティのオーバーライドを妨げているのは何ですか?

私も試しました:

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelay:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

if (cell.shade.alpha > 0.5) {
    [cell.shade setAlpha:0.0];
} else {
    [cell.shade setAlpha:1.0];
}

[UIView commitAnimations];

しかし、結果は同じです。

アニメーションを入れたくないsetSelected:のは、コードを入れた結果が「setSelected ordidSelect should be the same, and I want the new view to stay visible after it's selected, so conceptually it makes sense to put the code indidSelect」になるからです。

4

1 に答える 1

0

選択時と強調表示時にのみアニメーションが必要な場合は、アニメーションを削除して-cellForRowAtIndexPathください。これは、テーブルビューに表示されていないセルが必要なときに呼び出されるためです。Dinesh が UITableViewCellClass と override と言ったようにサブクラス化します-setSelected: setHighlighted:
本当に必要な場合を除き、レイヤーを使用しないでください (20% 未満のケースで発生します)。UIView クラスには、単純なアニメーション ブロックを使用してこの種のアニメーションを実行するために必要なすべてがあり、レイヤーはアニメーションに関するより多くの概念を導入しmodalLayerますpresentationLayer
ビューを追加する場所に注意し、サブビューのコンテナとしてUITableViewCell使用してください。 UITableView がいつセルを表示/選択/非表示にするかを知りたい場合は、見なければならないメソッドがたくさんあります。-contentView
UITableViewDelegateProtocol
それらのいくつかに言及するだけです:

– tableView:willDisplayCell:forRowAtIndexPath:
– tableView:willSelectRowAtIndexPath:
– tableView:didEndDisplayingCell:forRowAtIndexPath:

お役に立てれば。 アンドレア・
チャオ

于 2013-07-07T12:55:43.077 に答える