我正在使用一个自定义UITableViewCell,我在其中放置了一个子类UIView(内contentView
,natch)。有问题的UIView显示一个方向箭头和两行支持文本。
箭头通过具有背景颜色和箭头形蒙版的图层显示。根据箭头指向的方向,背景颜色会变为两种可能性之一。
每当需要更新箭头时,视图都会收到NSNotification(基于但不等同于当前标题 - 每个单元格和视图都不同)。当它收到通知时,视图调用一个私有方法来执行转换。这将动画箭头层,有效地将其围绕其中心旋转到一个新方向,如下所示:
// Update layer BG color, then ...
[UIView setAnimationBeginsFromCurrentState:YES];
CATransform3D transform = CATransform3DMakeRotation(DegreesToRadians(locationDirection), 0, 0, 1);
_arrowLayer.transform = transform;
(注:_arrowLayer
仅供内部使用,不通过属性公开。)
UIView上还有一个属性来设置用于创建支持文本的信息。当它被改变时,setNeedsDisplay
被调用,该drawRect:
方法进行计算并绘制结果文本。
这一切都很好。但是,我遇到了一个主要问题:
在滚动表格视图的同时,箭头正在动画化,导致一些大联盟的滚动不稳定,通常到滚动停止的地步!即使这是contentView
(以最小测试用例的名义)中的唯一视图,也没关系。
如果设备没有移动,滚动是可以接受的,但仍有待改进。
我希望我只是犯了一个基本错误(不要使用drawRect:
?以其他方式进行转换?以上都不是?)
提前感谢任何线索/建议!
2011 年 10 月 4 日更新:我尝试在滚动开始/停止时让UITableViewController监视UIScrollViewDelegate(根据UIScrollView编程指南),然后每个方向箭头视图询问其委托(在本例中为表 VC)是否可以进行动画处理。不过,这也无济于事。如果动画正在进行中,我们就不走运了。也许NSNotification是有序的,方向箭头视图寻找某个通知。(虽然这听起来有点倒退,不是吗?给其他对象一个他们可以发送的通知?嗯。)