0

我正在尝试在选择UIViewUITableViewCell淡入淡出。在 xib 文件中,我将视图设置opacityYES和。alpha0.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因为当 tableview 需要一个单元格时调用它,而不是显示。子类如 Dinesh 所说 UITableViewCellClass 和 override -setSelected: setHighlighted:
除非你真的需要,否则不要使用图层(它会在不到 20% 的情况下发生),UIView 类拥有使用简单动画块做这种动画所需的一切,图层引入了更多关于动画modalLayer的概念presentationLayer
注意添加视图的位置,UITableViewCell使用 a-contentView作为子视图的容器。
如果您想知道 UITableView 何时显示/选择/关闭单元格,请使用UITableViewDelegateProtocol它有很多您应该查看的方法。
仅提及其中一些:

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

希望这可以帮助。
乔安德里亚
_

于 2013-07-07T12:55:43.077 回答