我正在使用自定义 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;
(n.b。:_arrowLayer
仅供内部使用,不通过财产公开。)
UIView 上还有一个属性,用于设置用于创建支持文字的信息。如果更改了此项,则会调用setNeedsDisplay
,drawRect:
方法会进行计算并绘制生成的文本。
这一切都很好。但是, 我遇到了一个主要问题 :
在箭头动画的同时滚动表格视图会导致一些大联盟不稳定的滚动,经常到滚动停止的时间点!即使这是contentView
中的唯一视图(以最小测试用例的名义),也没关系。
如果设备没有移动,滚动是适度可接受的,但仍有待改进。
我希望我只是犯了一个基本错误(不要使用drawRect:
?换一些方法吗?以上都没有?)
提前感谢任何线索/建议!
2011年10月4日更新:我尝试使用 UITableViewController 观看 UIScrollViewDelegate (根据 UIScrollView 编程指南)当滚动开始/停止时,每个方向箭头视图询问其委托(在这种情况下为表VC)是否可以设置动画。尽管如此,这并没有多大帮助。如果动画正在进行中,我们运气不好。也许 NSNotification 是有序的,方向箭头视图可以查找特定通知。 (虽然听起来有些倒退,不是吗?给其他对象提供他们可以发出的通知吗?嗯。)
答案 0 :(得分:0)
尝试这样的事情:
self.layer.shouldRasterize = YES;
我不确定哪个图层(或多个图层)应该设置此属性,但我经常遇到动画不稳定的问题,通过设置shouldRasterize
可以解决哪个问题。
答案 1 :(得分:0)
高性能滚动的技巧是使用CoreGraphics而不是CoreAnimation。可以在这里找到解释:
http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/
这是另一个StackOverflow问题: Tricks for improving iPhone UITableView scrolling performance?
所以在这个例子中,我会尝试避免箭头蒙版并用CG
绘制它