0

我的应用程序中有一个对象拖动和视频录制。我ScreenCapture在我的应用程序中使用视图。我正在拍摄主屏幕的屏幕截图并制作视频。

当我在视图drawRect()方法中使用以下代码时ScreenCapture,iOS 6 的拖动速度变慢,而 iOS 5 则可以正常工作:

[self performSelector:@selector(setNeedsDisplay) withObject:nil
      afterDelay:delayRemaining > 0.0 ? delayRemaining : 0.01];

当我用以下代码替换那行代码时,拖动工作正常,但访问不正确:

[self performSelectorInBackground:@selector(setNeedsDisplay) withObject:nil];

这是什么原因?

4

3 回答 3

1

因为那个drawRect方法只在mainThread上工作。苹果文件说 UIKit 只工作主线程。所以你需要在主线程中设置需要布局

于 2013-02-11T13:08:24.143 回答
1

你应该只在主线程中调用 UI 方法,所以你不能这样做。

如果您的视图很慢,那么您需要安排在后台线程中做一些昂贵的事情,这将使主线程中的绘图更快。

您调用的实际方法无论如何都没有做任何事情。它只是标记要重绘的视图。工作还需要发生在drawRect方法中。

于 2013-02-11T12:42:19.993 回答
0

不应该在主线程上调用正在更新的 UIKit 控件。因为 UIKit 类不是线程安全的。

我使用过 ScreenCaptureView 类。在这种情况下,您可以在后台调用另一个方法并在该方法中使用 drawRect 代码,如下所示,

[self performSelectorInBackground:@selector(callCodeInsideDrawRect) withObject:nil];



-(void)callCodeInsideDrawRect
{
 //any code which is required to be called in background (drawRectCode)
 //in ur case draw rect block

}
于 2013-02-11T12:54:15.530 回答