zoukankan      html  css  js  c++  java
  • iOS开发UI篇—Quartz2D使用(截屏)

    iOS开发UI篇—Quartz2D使用(截屏)

    一、简单说明

    在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏。如图:

    完成截屏功能的核心代码:- (void)renderInContext:(CGContextRef)ctx;调用某个view的layer的renderInContext:方法即可

    二、代码示例

      storyboard界面搭建:

    代码:

    //
    //  YYViewController.m
    //  01-截屏
    //
    //  Created by apple on 14-6-12.
    //  Copyright (c) 2014年 itcase. All rights reserved.
    //
    
    #import "YYViewController.h"
    #import "MBProgressHUD+NJ.h"
    
    @interface YYViewController ()
    @property (weak, nonatomic) IBOutlet UIView *contentView;
    - (IBAction)BtnClick:(UIButton *)sender;
    
    @end
    
    @implementation YYViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    }
    
    - (IBAction)BtnClick:(UIButton *)sender {
        
        //延迟两秒保存
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            //获取图形上下文
            //    UIGraphicsBeginImageContext(self.view.frame.size);
            UIGraphicsBeginImageContext(self.contentView.frame.size);
            //将view绘制到图形上下文中
            
            //    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
            [self.contentView.layer renderInContext:UIGraphicsGetCurrentContext()];
         
            
            //将截屏保存到相册
            UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
            
            UIImageWriteToSavedPhotosAlbum(newImage,self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
        });
    }
    
     - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
    {
        if (error) {
            [MBProgressHUD showError:@"保存失败,请检查是否拥有相关的权限"];
        }else
        {
    //        [MBProgressHUD showMessage:@"保存成功!"];
            [MBProgressHUD showSuccess:@"保存成功!"];
        }
    }
    
    @end
    把截取的图片保存到手机的相册中:

     

    说明:把整个屏幕画到一张图片里
    1.创建一个bitmap的上下文
    2.将屏幕绘制带上下文中
    3.从上下文中取出绘制好的图片
    4.保存图片到相册 
    补充:把图片写入到文件的代码
    //3.从上下文中取出绘制好的图片
         UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
         
         NSData *data = UIImagePNGRepresentation(newImage);
         
         NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"abc.png"];
         NSLog(@"%@", path);
         [data writeToFile:path atomically:YES];
    三、补充
    保存成功和保存失败之后应该做些事情?
    系统推荐的方法:
    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
    {
        if (error) {
            [MBProgressHUD showError:@"保存失败,请检查是否拥有相关的权限"];
        }else
        {
    //        [MBProgressHUD showMessage:@"保存成功!"];
            [MBProgressHUD showSuccess:@"保存成功!"];
        }
    }
    如果图片成功保存的话,那么就提示保存成功。
    如果保存失败,那么提示失败
    提示:保存失败常见有两个原因:1是内存不够,2是手机内部的权限不允许。
    说明:如果当一个应用程序想要访问通讯录或相册,用户已经明确拒绝过,那么以后再要访问的话会直接拒绝。这个时候,可以提示用户去开启权限。
  • 相关阅读:
    简单的模板解析函数
    HTML通过事件传递参数到js 二 event
    HTML通过事件传递参数到js一
    通过this获取当前点击选项相关数据
    LeetCode 20. 有效的括号(Valid Parentheses)
    LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
    LeetCode 14. 最长公共前缀(Longest Common Prefix)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    LeetCode 171. Excel表列序号(Excel Sheet Column Number) 22
    LeetCode 665. 非递减数列(Non-decreasing Array)
  • 原文地址:https://www.cnblogs.com/yipingios/p/5557071.html
Copyright © 2011-2022 走看看