1

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

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

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

编辑

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

*iPhone 3GS、iOS 4.2.1 -
iPod Touch (Retnia)、5.1 -没有
iPod 模拟器 4.2 -没有
iPod 模拟器 5.1 -没有

我还采纳了 Lorean 和 DavidH 的建议,但并没有解决问题。

*当我从 XCode 构建时,3gs 设备旁边有一条消息,上面写着“Overriding base SDK to 4.3”

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

4

3 回答 3

1

您应该只将自定义视图添加到单元格的内容视图中。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html

于 2012-08-20T20:31:29.717 回答
1

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

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

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

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

于 2012-08-20T21:27:05.413 回答
1

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

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

//do stuff

if ([[[UIDevice currentDevice] systemVersion] floatValue]<5.0) [CATransaction commit];
于 2012-08-21T01:54:08.560 回答