zoukankan      html  css  js  c++  java
  • iPhone/iPad全屏截图与区域截图的几种方法

    本文由社区会员taonavy分享

    截取本区域(self.view):

    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);

    全屏截图:

    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:

    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) .

    截图另存为指定名字:

    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):

    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);

    全屏截图:

    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:

    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) .

    截图另存为指定名字:

    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 

    社区原贴:http://www.cocoachina.com/bbs/read.php?tid=114736

  • 相关阅读:
    linux源码解读(五):文件系统——文件和目录的操作
    linux源码解读(二):文件系统——高速缓存区
    linux源码解读(一):进程的创建、调度和销毁
    linux源码解读(四):文件系统——挂载和卸载
    .net工作室第六周、类。人打怪兽
    无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型
    sql查询语句
    .net工作室第七周 数据库
    时间函数的使用。
    GridView 删除数据
  • 原文地址:https://www.cnblogs.com/greywolf/p/3160369.html
Copyright © 2011-2022 走看看