以编程方式默认iPhone屏幕截图

时间:2015-04-13 23:25:48

标签: ios objective-c uiimage

我尝试了两种不同的方法来创建屏幕截图,但遗憾的是它们无法正常工作,我在屏幕截图中显示了一个空白的RMMapView。当我在设备上手动创建快照时,它可以正常工作,并且地图视图在屏幕上。所以我想以编程方式实现相同的结果。我尝试的某种方式有可能吗?或者这样做的正确方法是什么? (重现那种类型的屏幕截图)

- (UIImage *) takeScreenshot {

    //1. version
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);

    [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;


    //2. version
    UIGraphicsBeginImageContext(self.view.bounds.size);

    CGContextRef context=UIGraphicsGetCurrentContext();
    [self.view.layer renderInContext:context];

    UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

}

1 个答案:

答案 0 :(得分:0)

实际上您可以在RMMapView中使用名为takeSnapshot的方法。

UIImage *image = self.mapView.takeSnapshot

[更新] 你可以尝试这种方法吗

CGSize size = self.view.bounds.size;
CGRect cropRect = self.mapView.bounds

UIGraphicsBeginImageContext(size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * mapImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGImageRef imageRef = CGImageCreateWithImageInRect(mapImage.CGImage, cropRect);
UIImage * cropImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef);

UIImageWriteToSavedPhotosAlbum(cropImage, nil, nil, nil);

UIGraphicsEndImageContext();
祝你好运