我有一个UITableViewCell
在drawRect:方法中进行绘制的子类。整个矩形是自定义绘制的,包括背景。
我能够获得非常复杂的单元格,同时保持滚动非常平滑。
我的问题:我打电话[table deselectRowAtIndexPath:path animated:YES];
每当视图出现时,为了遵守 Apple 的 HIG。但是,没有动画发生。当然,当我有一个透明的自定义视图(使用子视图创建)(因此 Apple 的背景将出现在下面)时,它就起作用了。现在不行了。
我的drawRect:在“动画时间”期间(大约中间)被调用一次。我认为发生这种情况是因为它将单元格的突出显示属性从 1 动画化到 0,并且当它低于 0.5 时它会捕捉到 0。
我怎样才能动画化这个过渡?我的猜测是使用通常的 beginAnimations: 等,并将单元格对象中的自定义浮点字段从 1 动画到 0。这会调用吗drawRect:
反复动画?
Update我设法让它几乎可以工作。我已经重写了 setSelected:animated: 像这样:
- (void) setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:NO];
if (animated) {
[CATransaction begin];
CATransition* animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.6;
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[view.layer addAnimation:animation forKey:@"deselectRow"];
[CATransaction commit];
}
}
如果表格视图在屏幕上,这将非常有效。但是,如果我从导航(返回)返回表视图,它不会从选定淡入淡出为未选定,而是从不可见淡出为未选定。什么会导致这种情况?
答案有点晚了,但可能对您和其他人仍然有用。您需要做的是在向超级发送消息之前分配您的自定义选定视图,如下所示:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
UIView *view = [[UIView alloc] initWithFrame:self.frame];
view.backgroundColor = [UIColor colorWithRed:.9 green:.0 blue:.125 alpha:1.0];
self.selectedBackgroundView = view;
[super setSelected:selected animated:animated];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)