UIView的无损截图

说明

1. 烂大街的代码

2. 写成category后,方便直接从drawRect中获取绘制出来的图片

3. 可以直接绘制图片供按钮设置背景图片用

4. 无损截图(包括alpha通道值也被无损保存)

源码

//
//  UIView+ScreensShot.h
//  ColorfulView
//
//  Created by YouXianMing on 15/7/17.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (ScreensShot)

/**
 *  无损截图
 *
 *  This function may be called from any thread of your app.
 *
 *  @return 返回生成的图片
 */
- (UIImage *)screenShot;

@end
//
//  UIView+ScreensShot.m
//  ColorfulView
//
//  Created by YouXianMing on 15/7/17.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "UIView+ScreensShot.h"
#import <objc/runtime.h>

@implementation UIView (ScreensShot)

- (UIImage *)screenShot {

    if (self && self.frame.size.height && self.frame.size.width) {

        UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0);
        [self.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        return image;

    } else {

        return nil;
    }

}

@end
//
//  ViewController.m
//  ColorfulView
//
//  Created by YouXianMing on 15/7/10.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "UIView+ScreensShot.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blackColor];

    UIView *cyanView         = [[UIView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)];
    cyanView.backgroundColor = [UIColor cyanColor];
    cyanView.alpha           = 0.5f;
    [self.view addSubview:cyanView];

    UIImageView *imageView   = [[UIImageView alloc] initWithImage:[cyanView screenShot]];
    imageView.frame          = CGRectMake(80, 80, 100, 100);
    [self.view addSubview:imageView];
}

@end
时间: 2024-12-14 19:29:00

UIView的无损截图的相关文章

[翻译] MotionBlur

MotionBlur https://github.com/fastred/MotionBlur MotionBlur allows you to add motion blur effect to your animations (currently only position's change). See the accompanying blog post to learn how it's implemented. MotionBlur允许你添加动态模糊特效(目前只支持位移变化).你可以

【代码笔记】对UIView进行截图

一,效果图. 二,工程图. 三,代码. RootViewController.m #import "RootViewController.h" @interface RootViewController () @end @implementation RootViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super ini

APP适配IOS8,iPhone6和Plus截图简要说明

有幸在9月25日拿到了iP6和iP6 Plus的真机,恰好又要做适配APP的工作(从iphone5上适配到iphone6和ip6 plus上),所以在真机上研究了下苹果官方在不同分辨率下对系统APP所做的适配.同时在网上也没找到相关的真机对比截图说明什么的,又有朋友问我要IP6和PLUS的真机截图回去自己研究,既然这样,那么干嘛不利用自己已有的资源,让更多的设计师受益呢?所以那就说点什么吧,抛砖引玉,希望大家可以共同研究,少走些弯路,共同成长. 之前看过@jingdesign 的关于适配ip6的

iOS---如何截图,如何将图片保存到相册

最近的项目中运用到了这两个功能,所以记录一下.做了一个小工程将两个方法结合到了一起 1 - (void)viewDidLoad { [super viewDidLoad]; UIButton * btn = [UIButton buttonWithType:UIButtonTypeContactAdd]; btn.frame =CGRectMake(30, 30, 30, 30); [self.view addSubview:btn]; [btn addTarget:self action:@s

iOS使用代码截图

/** * 截图代码 * * @param view 需要截图的view * @param rect 需要截取的区域 * * @return 返回截取的对象 */ + (UIImage *)viewSnapshot:(UIView *)view withInRect:(CGRect)rect { UIGraphicsBeginImageContext(view.bounds.size); [view.layer renderInContext:UIGraphicsGetCurrentContex

UIImage 图片处理:截图,缩放,设定大小,存储

图片的处理大概就分 截图(capture), 缩放(scale),设定大小(resize), 存储(save)这几样比较好处理, 另外还有滤镜,擦试等, 以后再说在这个Demo code裡, 我写了几个方法 1.等比率缩放- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize { UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, im

非WinPE下对C盘无损扩容---分区之王

下载了vs2015,可惜C盘空间不足.网上百般搜索后找到一个ADDS很好用.现给出下载链接和使用方法:http://www.win7china.com/html/6692.html 还没有下载这个“分区之王”软件的朋友们可以去<Acronis Disk Director 11 Home下载,分区之王>下载一下.之所以软媒小编给这款软件冠以分区之王的称号,是软媒在2007年Vista之家刚开通的时候就重点介绍过这款软件. 不需要启动到dos界面或者WinPE界面下,直接在您的Win7.Vista

Quartz2D复习(一)--- 基础知识 / 绘制线段圆弧 / 图片水印 / 截图

1.Quartz 2D是一个二维绘图引擎,同时支持ios和Mac系统: Quart2D的API是纯C语言的,API来自于Core  Graphics框架: 2.Quartz 2D可以绘制图形(线段/三角形/矩形/圆和弧).绘制文字.绘制和生成图片.读取/生成pdf.截图/裁剪图片.自定义UI控件等 3.对于界面复杂且个性化的UI,普通的UI控件无法实现,而Quartz2D技术却可以通过自定义UI控件来实现.其实,ios中大部分控件的内容都是通过Quart2D画出来的 4.图形上下文(Graphi

ios 截屏,截图

#pragma mark 截图 - (UIImage *)capture:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphi