drawViewHierarchyInRect在使用计时器调用时挂起

时间:2013-10-01 13:28:10

标签: uiview uikit ios7

假设有这种方法来创建UIView快照

+ (UIImage *)screenshotWithView:(UIView *)view {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0f);
    if( [view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)] ) { // LP: iOS 7 only
        [view drawViewHierarchyInRect:view.bounds
                   afterScreenUpdates:[view superview]?NO:YES];
    } else {
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    }
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

在一段时间内执行此方法时,请说出

之类的内容
runTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0f/30
                                                target:self
                                              selector:@selector(sendScreen)
                                              userInfo:nil

                                       repeats:repeat];

应用变得越来越慢。用户界面不会冻结,快照也会被删除,但性能会急剧下降。

这正是苹果公司在此不建议使用iOS7的新UI方法:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW217

使用经典

 [view.layer renderInContext:UIGraphicsGetCurrentContext()];

一切都按预期工作,但当然我们已经知道了。

尝试

时没有成功
- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates

0 个答案:

没有答案