手机截屏

简介: 手机截屏

你是否想对app的特定页面进行截屏分享出去或保存起来呢!

现在以把对app进行全屏截图保存到系统目录为例子:

截屏处理,返回截屏的图像:

-(UIImage*)cutOffScreen
{
    UIWindow *screenWindow = [[UIApplication sharedApplication] keyWindow];
    UIGraphicsBeginImageContextWithOptions(screenWindow.frame.size, NO, 0.0); // no ritina

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);
    for (UIWindow *window in [[UIApplication sharedApplication] windows])
    {

        if(window == screenWindow)
        {
            break;
        }else{
            [window.layer renderInContext:context];
        }
    }

    if ([screenWindow respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)])
    {
        [screenWindow drawViewHierarchyInRect:screenWindow.bounds afterScreenUpdates:YES];
    } else
    {
        [screenWindow.layer renderInContext:context];
    }
    CGContextRestoreGState(context);
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    screenWindow.layer.contents = nil;
    UIGraphicsEndImageContext();

    return image;
}

简单的存入照片库。要注意:首先导入这个库QuartzCore.framework,其次在系统Info.plist文件中增加Privacy - Camera Usage Description这个键值对。设置会崩溃的吆!

-(void) screenShotAction
{
    //写入相册
    UIImageWriteToSavedPhotosAlbum([self cutOffScreen], self, nil, nil);
}

当然你想更完美的调用,你截屏通常有按钮吧,甚至有导航栏,一般在地图页面,那么截屏时最好把它们都隐藏,截屏完毕再恢复。就需要有延迟处理。本例子可以做参照,具体根据实际情况而定。

-(void)processRightBtnHit
{
    NSArray* pAnnotations = [NSArray arrayWithArray:_mapView.annotations];
    [_mapView removeAnnotations:pAnnotations];//移除标注
    NSArray* pOverlays = [NSArray arrayWithArray:_mapView.overlays];
    [_mapView removeOverlays:pOverlays];//移除覆盖层

    _mapView.frame = CGRectMake(0, 0, FULL_WIDTH, FULL_HEIGHT);
    self.navigationBar.hidden = YES;
    [self handleMidPoints:self.currentPathLocationDataArray];
    [UIView animateWithDuration:0.1 animations:^{

    } completion:^(BOOL finished) {
        [self screenShotAction];
    }];
}

-(void) screenShotAction
{
    //写入相册
    UIImageWriteToSavedPhotosAlbum([self cutOffScreen], self, nil, nil);
    [UIView animateWithDuration:0.1 animations:^{

    } completion:^(BOOL finished) {
        NSArray* pAnnotations = [NSArray arrayWithArray:_mapView.annotations];
        [_mapView removeAnnotations:pAnnotations];//移除标注
        NSArray* pOverlays = [NSArray arrayWithArray:_mapView.overlays];
        [_mapView removeOverlays:pOverlays];//移除覆盖层

        _mapView.frame = CGRectMake(0, NAVBAR_HEIGHT, FULL_WIDTH, FULL_HEIGHT - NAVBAR_HEIGHT);
        self.navigationBar.hidden = NO;
        [self handleMidPoints:self.currentPathLocationDataArray];
    }];
}
目录
相关文章
|
编解码
苹果手机截屏分辨率,注意视图的标准与放大的差异
为了苹果应用上架,吾亲自(?)截屏。结果发现,截屏后的图片分辨率,始终不对。怎么个不对法?
399 0
|
6月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
5101 2
|
7月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
222 0
|
7月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
495 0
|
7月前
|
Web App开发 前端开发 网络安全
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
【2月更文挑战第21天】前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
113 1
前端分析工具之 Charles 录制 Android/IOS 手机的 https 应用
|
7月前
|
存储 数据库 Android开发
Android实现手机内存存储功能
Android实现手机内存存储功能
70 2
|
7月前
|
网络协议 安全 Linux
如何使用Android手机通过JuiceSSH远程访问本地Linux服务器
如何使用Android手机通过JuiceSSH远程访问本地Linux服务器

热门文章

最新文章