iPhone/iPad全屏截图与区域截图的几种方法

截取本区域(self.view):

1
2
3
4
5
UIGraphicsBeginImageContext (CGSizeMake (self.view.frame.size.width, self.view.frame.size.height ) );
    [self.view.layer renderInContext :UIGraphicsGetCurrentContext ( ) ];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext ( );
    UIGraphicsEndImageContext ( );
    UIImageWriteToSavedPhotosAlbum (viewImage, nil, nil, nil );

全屏截图:

1
2
3
4
5
6
UIWindow *screenWindow = [ [UIApplication sharedApplication ] keyWindow ];
    UIGraphicsBeginImageContext (screenWindow.frame.size );
    [screenWindow.layer renderInContext :UIGraphicsGetCurrentContext ( ) ];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext ( );
    UIGraphicsEndImageContext ( );
    UIImageWriteToSavedPhotosAlbum (viewImage, nil, nil, nil );

以上2种方法真机和模拟器都可以运行.在photo.app里可以看到照片

苹果最新开放的接口函数(全屏截图),已经有人试过了,不会reject:

1
2
3
4
5
CGImageRef UIGetScreenImage ( );
    CGImageRef img = UIGetScreenImage ( );
    UIImage * scImage = [UIImage imageWithCGImage :img ];
    UIImageWriteToSavedPhotosAlbum (scImage, nil, nil, nil );
It still works,but only on -device (not in simulator ) .

截图另存为指定名字:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UIWindow *screenWindow = [ [UIApplication sharedApplication ] keyWindow ];

UIGraphicsBeginImageContext (screenWindow.frame.size );
[screenWindow.layer renderInContext :UIGraphicsGetCurrentContext ( ) ];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext ( );
UIGraphicsEndImageContext ( );

NSData *screenshotPNG = UIImagePNGRepresentation (screenshot );

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES );
NSString *documentsDirectory = [paths objectAtIndex : 0 ];

NSError *error = nil;
[screenshotPNG writeToFile : [documentsDirectory stringByAppendingPathComponent : @ "screenshot.png" ] options :NSAtomicWrite error :&error ];

部分代码来自:http://stackoverflow.com/questions/692464/emailing-full-screen-of-iphone-app

没有ipad真机截图发布app的可以用此方法做个透明按钮点,哈哈.
截取本区域(self.view):

1
2
3
4
5
UIGraphicsBeginImageContext (CGSizeMake (self.view.frame.size.width, self.view.frame.size.height ) );
    [self.view.layer renderInContext :UIGraphicsGetCurrentContext ( ) ];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext ( );
    UIGraphicsEndImageContext ( );
    UIImageWriteToSavedPhotosAlbum (viewImage, nil, nil, nil );

全屏截图:

1
2
3
4
5
6
UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
    UIGraphicsBeginImageContext(screenWindow.frame.size);
    [screenWindow.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

以上2种方法真机和模拟器都可以运行.在photo.app里可以看到照片

苹果最新开放的接口函数(全屏截图),已经有人试过了,不会reject:

1
2
3
4
5
CGImageRef UIGetScreenImage ( );
    CGImageRef img = UIGetScreenImage ( );
    UIImage * scImage = [UIImage imageWithCGImage :img ];
    UIImageWriteToSavedPhotosAlbum (scImage, nil, nil, nil );
It still works,but only on -device (not in simulator ) .

截图另存为指定名字:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
UIWindow *screenWindow = [ [UIApplication sharedApplication ] keyWindow ];

UIGraphicsBeginImageContext (screenWindow.frame.size );
[screenWindow.layer renderInContext :UIGraphicsGetCurrentContext ( ) ];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext ( );
UIGraphicsEndImageContext ( );

NSData *screenshotPNG = UIImagePNGRepresentation (screenshot );

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES );
NSString *documentsDirectory = [paths objectAtIndex : 0 ];

NSError *error = nil;
[screenshotPNG writeToFile : [documentsDirectory stringByAppendingPathComponent : @ "screenshot.png" ] options :NSAtomicWrite error :&error ];


版权声明:本文为slinloss原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。