iOS 7截取了部分UIView的截图

use*_*905 20 objective-c uiview ios ios7

我有一个400x320的视图(testView),我需要截取这个视图的部分截图(比如rect =(50,50,200,200)).我正在玩iOS 7中的drawViewHierarchy方法,但我无法弄清楚如何正确地完成它.

    UIGraphicsBeginImageContextWithOptions(self.testView.bounds.size, NO, [UIScreen mainScreen].scale);

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

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

谢谢.

Ruf*_*fel 36

获取整个快照后,您可以在较小的图形上下文中绘制它,以获得您想要的部分:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), YES, [UIScreen mainScreen].scale);
[image drawInRect:CGRectMake(-50, -50, image.size.width, image.size.height)];
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

编辑:更好的是,直接在较小的上下文中绘制层次结构:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, [UIScreen mainScreen].scale);
[self.testView drawViewHierarchyInRect:CGRectMake(-50, -50, self.testView.bounds.size.width, self.testView.bounds.size.height) afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

  • @meaning-matters 这里的技巧是通过使用与视图完全相同的大小来绘制层次结构(以防止缩放),并对其进行偏移以获得您想要的部分。通过使用 UIGraphicsBeginImageContextWithOptions(CGSize(width: 200, height: 200), true, 0)` 你可以使用 view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) 获得视图的左上角 200x200 部分。您还可以这样偏移您得到的部分: `view.drawHierarchy(in: UIEdgeInsetsInsetRect(view.bounds, UIEdgeInsets(top: -100, left: -100, Bottom: 0, right: 0)), afterScreenUpdates: true) `。希望能帮助到你! (2认同)