4

我正在使用一个自定义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是有序的,方向箭头视图寻找某个通知。(虽然这听起来有点倒退,不是吗?给其他对象一个他们可以发送的通知?嗯。)

4

2 回答 2

0

尝试这样的事情:

self.layer.shouldRasterize = YES;

我不确定应该在哪一层(或几层)设置这个属性,但是我经常遇到动画生涩的问题,这个问题可以通过设置来解决shouldRasterize

于 2011-10-05T17:50:43.830 回答
0

高性能滚动的诀窍是使用 CoreGraphics 而不是 CoreAnimation。可以在这里找到解释:

http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/

这是另一个 StackOverflow 问题: 提高 iPhone UITableView 滚动性能的技巧?

所以在这个例子中,我会尽量避免使用箭头蒙版并用 CG 来绘制它

于 2011-10-05T17:59:07.737 回答