UIGraphicsBeginImageContextWithOptions非常值得记忆灾难

时间:2014-03-14 13:07:14

标签: ios objective-c ipad uiview uiwebview

我有这行代码来截取uiview的截图:

    - (UIImage *)imageWithView:(UIView *)view {
    UIImage *viewImage = nil;
    float height;
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){
        height = view.frame.size.height;
    }else{
        height = 730;
    }
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.width, height), YES, 0.0);

        [view drawViewHierarchyInRect:CGRectMake(0, -60, view.bounds.size.width, height) afterScreenUpdates:YES];
        viewImage = UIGraphicsGetImageFromCurrentImageContext();


    UIGraphicsEndImageContext();
    return viewImage;
}

...在这个uiview中是UIWebView。

每次uiwebview完成加载时我调用的- (UIImage *)imageWithView:(UIView *)view方法。还有我的问题:当我打开一些像google这样的小网页时,它会花费一些kb的内存,但是当我打开像bbc,cnn,yahoo或stackoverflow这样的biger时,它可能需要80mb的内存使用量。

cnn.com打开时有仪器的快照。 enter image description here 几秒钟之后,它会重新发布,但我不想要那么大的内存使用量,因为你可以想象,在这几秒钟内,uiwebview会变得多么无用。

那么,你有什么建议,如何拍摄uiwebview的大纲,没有如此大的内存使用量,我甚至不需要这个uiimage的高质量,因为我把它放在120 * 80 {{1在其中一个屏幕角落里。

1 个答案:

答案 0 :(得分:4)

UIGraphicsBeginImageContextWithOptions中的最后一个参数是scale。如果您知道只需要Web视图的低分辨率渲染,请尝试设置小于1.0的比例值。

UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.width, height), YES, 0.2);