我的应用程序在做捏手势识别器时非常慢

时间:2012-04-25 05:50:49

标签: ios4 uipinchgesturerecognizer

我在iOS 5中正在做一个iPhone应用程序。

因为我正在扩展并重新加载uitableview,同时识别捏合手势。

它在模拟器中运行良好。但在设备中它的工作速度很慢。例如,在UIGestureRecognizerStateEnded之后的设备中,只会扩展所有行,但在模拟器中,行会在UIGestureRecognizerStateChanged自身的情况下进行扩展和重新加载。

有关内存问题的任何建议吗?

我的代码在这里

if (pinchRecognizer.state == UIGestureRecognizerStateBegan) {

    self.initialPinchHeight = rowHeight;

    [self updateForPinchScale:pinchRecognizer.scale];
}
else {
    if (pinchRecognizer.state == UIGestureRecognizerStateChanged) {
        [self updateForPinchScale:pinchRecognizer.scale];

    }
    else if ((pinchRecognizer.state == UIGestureRecognizerStateCancelled) || (pinchRecognizer.state == UIGestureRecognizerStateEnded)) {
    }
}

-(void)updateForPinchScale:(CGFloat)scale{

CGFloat newHeight = round(MAX(self.initialPinchHeight * scale, DEFAULT_ROW_HEIGHT));

rowHeight = round(MIN(30.0, newHeight));
/*
 Switch off animations during the row height resize, otherwise there is a lag before the user's action is seen.
 */
BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];
NSArray *visibleRows = [self.tableView indexPathsForVisibleRows];
[self.tableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:animationsEnabled];
}

1 个答案:

答案 0 :(得分:0)

在尝试确定要优化的内容之前,您应该测量问题所在。您可以使用时间配置文件和核心动画工具执行此操作。使用Xcode的产品菜单,然后选择配置文件。确保在连接到设备时进行配置,正如您所注意到的那样,它具有与模拟器不同的性能特征。

Time Profile仪器将帮助您识别CPU上完成的工作。核心动画工具将帮助您识别Core Animation在CPU和GPU上完成的工作。注意Core Animation instrument's调试选项复选框。它们有点神秘,但它们可以帮助您直观地识别UI中使核心动画做很多工作的部分。

适用于iOS的不同工具的文档为here

我还推荐涵盖核心动画的WWDC video