UITableViewCell内带有CATTransferM3D的UIView=断断续续滚动

UITableViewCell内带有CATTransferM3D的UIView=断断续续滚动,uiview,uitableview,drawrect,catransform3d,Uiview,Uitableview,Drawrect,Catransform3d,我正在使用一个自定义的UITableViewCell,在其中放置一个子类UIView(在contentView中,natch)。相关的ui视图显示一个方向箭头和两行支持文本 箭头通过带有背景色和箭头形状遮罩的图层显示。根据箭头指向的方向,背景颜色将更改为两种可能性之一 每当视图需要更新箭头时(基于但不等同于当前标题-每个单元格和视图都不同),视图都会收到NSNotification。当收到通知时,视图调用私有方法来执行转换。这将设置箭头层的动画,有效地将其围绕其中心旋转到新方向,如下所示:

我正在使用一个自定义的UITableViewCell,在其中放置一个子类UIView(在
contentView
中,natch)。相关的ui视图显示一个方向箭头和两行支持文本

箭头通过带有背景色和箭头形状遮罩的图层显示。根据箭头指向的方向,背景颜色将更改为两种可能性之一

每当视图需要更新箭头时(基于但不等同于当前标题-每个单元格和视图都不同),视图都会收到NSNotification。当收到通知时,视图调用私有方法来执行转换。这将设置箭头层的动画,有效地将其围绕其中心旋转到新方向,如下所示:

    // Update layer BG color, then ...

    [UIView setAnimationBeginsFromCurrentState:YES];
    CATransform3D transform = CATransform3DMakeRotation(DegreesToRadians(locationDirection), 0, 0, 1);
    _arrowLayer.transform = transform;
(注意:
\u arrowLayer
仅供内部使用,不通过属性公开。)

ui视图上还有一个属性,用于设置用于创建支持文本的信息。更改此选项后,将调用
setNeedsDisplay
,然后
drawRect:
方法进行计算并绘制结果文本

那很好。然而,我遇到了一个主要问题:

滚动表视图的同时,箭头是动画的结果,在一些大联盟起伏滚动,往往到滚动停止短点!即使这是
contentView
中的唯一视图(以最小测试用例的名义),它也无关紧要

如果设备未移动,滚动是可以接受的,但仍有待改进

我希望我只是犯了一个基本错误(不要使用
drawRect:
?以其他方式进行转换吗?以上都没有?)

提前感谢您提供的任何线索/建议


更新2011年10月4日:我试着让UITableViewController观察UIScrollViewDelegate(根据UIScrollView编程指南)当滚动开始/停止时,每个方向箭头视图都会询问其委托人(本例中的表VC)是否可以设置动画。不过,这也没什么帮助。如果动画片正在制作中,我们就倒霉了。也许NSNotification是正确的,方向箭头视图会查找特定的通知。(这听起来有点倒退,不是吗?给其他对象一个他们可以发送的通知?嗯。)

试试这样:

self.layer.shouldRasterize = YES;

我不确定哪个层(或多个层)应该设置此属性,但我经常遇到动画抖动的问题,通过设置
shouldRasterize

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

还有一个问题:


因此,在本例中,我会尽量避免使用箭头遮罩,并使用CG绘制它。是的,我已经在单元格的其他地方使用了Loren的技术(用于支持文本)。据我所知,我们并不是用“CoreGraphics”而不是“CoreAnimation”。这是因为你越是自己画,CoreAnimation就会像glass一样平滑地滚动。(苹果有一个table view cells演示,展示了多种技术。)。。。所有这些让我直接回到我的问题:你能拥有一个独立的动画对象(与表格视图单元格的滚动无关)并让它和平共处吗?我会试试看-谢谢!我甚至没想过那件事。在我的例子中,我会设置旋转的图层。值得一试。哦,有趣。当你提到shouldRasterize时,我发现:更新:如果我理解正确,shouldRasterize用于屏幕外渲染,但我旋转的CALayer始终在视图中,加上我使用的是遮罩,并且在遮罩启动之前发生了光栅化。鲁宾逊会有危险吗?是的,肯定会有危险。我并不假装理解
应该如何光栅化
的工作原理——在我用它来修复不稳定动画的每一种情况下,从逻辑上看,它应该产生完全相反的效果。不用担心。值得一试!