how to take a screenshot of the iPhone programmatically?

前端 未结 11 1854
谎友^
谎友^ 2020-11-28 08:01

Is it possible in objective C that we can take the screen shot of screen and stored this image in UIImage.

11条回答
  •  鱼传尺愫
    2020-11-28 08:11

    You need to create a bitmap context of the size of your screen and use

    [self.view.layer renderInContext:c]
    

    to copy your view in it. Once this is done, you can use

    CGBitmapContextCreateImage(c)
    

    to create a CGImage from your context.

    Elaboration :

    CGSize screenSize = [[UIScreen mainScreen] applicationFrame].size;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef ctx = CGBitmapContextCreate(nil, screenSize.width, screenSize.height, 8, 4*(int)screenSize.width, colorSpaceRef, kCGImageAlphaPremultipliedLast);
    CGContextTranslateCTM(ctx, 0.0, screenSize.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    
    [(CALayer*)self.view.layer renderInContext:ctx];
    
    CGImageRef cgImage = CGBitmapContextCreateImage(ctx);
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    CGContextRelease(ctx);  
    [UIImageJPEGRepresentation(image, 1.0) writeToFile:@"screen.jpg" atomically:NO];
    

    Note that if you run your code in response to a click on a UIButton, your image will shows that button pressed.

提交回复
热议问题