Programmatically take a screenshot of specific area

后端 未结 4 1562
半阙折子戏
半阙折子戏 2020-12-24 15:06

Like you can see in my code, I take a screenshot and save it to the photo album.

//for retina displays
if ([[UIScreen mainScreen] respondsToSelector:@selecto         


        
4条回答
  •  醉酒成梦
    2020-12-24 15:33

    You need to make two changes in order to only grab a portion of the screen:

    1. Create a smaller image - use the size of the rect you'd like to capture.
    2. Move the origin of the context that you're rendering into to be negative x/y of the rect you'd like to capture.

    After that, you just render the layer into the context as you were doing, and you should get what you're looking for. Something like this ought to do it:

    CGRect grabRect = CGRectMake(40,40,300,200);
    
    //for retina displays
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(grabRect.size, NO, [UIScreen mainScreen].scale);
    } else {
        UIGraphicsBeginImageContext(grabRect.size);
    }
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(ctx, -grabRect.origin.x, -grabRect.origin.y);
    [self.view.layer renderInContext:ctx];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
    

提交回复
热议问题