在iPhone 3gs 4.2.1上的UITableViewCell中的CALayer动画跳跃

时间:2012-08-20 20:20:18

标签: iphone ios uitableview

我创建了一个自定义视图,可在触发平移手势时调整CALayers的大小。当控件添加到普通UIVIew时,动画的行为与预期完全一样。

当视图通过UITableViewCell添加到addSubView时,动画会跳动。我在手势处理程序中放置了一些NSLog语句,它的行为完全符合预期。

UITableViewUITableViewCell会导致我遇到的这种意外行为吗?使用addSubView添加自定义视图是否正确?

编辑

我有关于这个问题的更多信息。这个问题似乎只出现在某些环境中。

* iPhone 3GS,iOS 4.2.1 -
iPod Touch(Retnia),5.1 - NO
iPod模拟器4.2 -
iPod模拟器5.1 -

我也提出了Lorean和DavidH提出的建议,这些建议没有解决问题。

*当我从XCode构建时,3gs设备旁边会显示一条消息“将基础SDK覆盖到4.3”

这可能是一个潜在的问题吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

虽然我同意视图应该作为contentView中的子视图放置,但还有另一个潜在的问题。移动scrollViews中的动画在历史上是非常糟糕的,因为整个系统不支持两个非耦合动画。

该问题的解决方案是当用户触摸单元格时,禁用滚动(即myTableView.scrollEnabled = NO,然后当平移手势完成时(所有动画),再次启用它。

编辑:这听起来有点时髦,但应该像我过去做的那样工作。当您获得第一个触摸事件时,计算图层的框架是self.view坐标,然后使用此框架将其添加到视图中,但保存旧框架。用户什么也看不见,现在你的观点正在提示中。显然你也必须阻止桌子移动。完成用户交互后,使用旧框架将视图移回单元格。

根据您的触摸方式,您可能需要在清晰的UIView中截取第一次触摸,该UIView覆盖所需的平移视图,当触摸它时,执行以上所有操作,然后将初始触摸转发到视图。希望这一步不是必需的。

答案 2 :(得分:1)

我实施了一个解决问题的黑客攻击。我可能决定完全关闭动画,因为它并不是真的需要,但如果有人有更好的答案,我很乐意接受。

if ([[[UIDevice currentDevice] systemVersion] floatValue]<5.0) 
{    
    [CATransaction begin];
    [CATransaction setDisableActions: YES];
}

//do stuff

if ([[[UIDevice currentDevice] systemVersion] floatValue]<5.0) [CATransaction commit];