我正在尝试在UIView
淡入时UITableViewCell
选中。在xib文件中,我将视图的opacity
设置为YES
,将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 or
didSelect 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 in
didSelect`的结果。
答案 0 :(得分:0)
如果您只需要在选择和突出显示期间需要动画,请删除-cellForRowAtIndexPath
中的动画,因为当tableview需要一个单元格而不显示时会调用该动画。子类为Dinesh说UITableViewCellClass并覆盖-setSelected:
setHighlighted:
。
除非你真的需要,否则不要使用图层(并且它会在不到20%的情况下发生),UIView类拥有使用简单动画块执行此类动画所需的一切,图层引入了关于modalLayer
的更多概念和presentationLayer
动画。
注意添加视图的位置,UITableViewCell
使用-contentView
作为子视图的容器
如果你想知道UITableView何时显示/选择/解除一个单元格,请使用UITableViewDelegateProtocol
它有很多你应该看的方法。
只提一些:
– tableView:willDisplayCell:forRowAtIndexPath:
– tableView:willSelectRowAtIndexPath:
– tableView:didEndDisplayingCell:forRowAtIndexPath:
希望这有帮助。
Ciao的,
安德烈