(IOS)截图Demo

思路是建一个UIView的子类,获取划动出的矩形,用协议将矩形传递给代理对象,依据该矩形完成图像数据的截取,并显示出来。

截图视图类:

#import <UIKit/UIKit.h>@protocol UICutImgDelegate;@interface BIDCutView : UIView
{CGPoint startPoint;CGRect targetRect;id <UICutImgDelegate> _delegate;
}
@property (assign , nonatomic) id delegate;
@end@protocol UICutImgDelegate <NSObject>
-(void)cutImgWithRect:(CGRect) aRect;
-(void)clear;
@end

 

#import "BIDCutView.h"@implementation BIDCutView@synthesize delegate=_delegate;- (id)initWithFrame:(CGRect)frame
{self = [super initWithFrame:frame];if (self) {// Initialization code
    }return self;
}- (void)drawRect:(CGRect)rect
{CGContextRef ctx = UIGraphicsGetCurrentContext();CGContextSetLineWidth(ctx, 1.5);CGContextSetStrokeColorWithColor(ctx, [UIColor purpleColor].CGColor);CGFloat lengths[2] = {15.0,5.0};CGContextSetLineDash(ctx, 2, lengths, 2);CGContextStrokeRect(ctx, targetRect);  //画虚线矩形
}-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{[self.delegate clear];startPoint=[[touches anyObject] locationInView:self];
}-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{CGPoint currentPoint=[[touches anyObject] locationInView:self];targetRect = CGRectMake(startPoint.x, startPoint.y, currentPoint.x-startPoint.x, currentPoint.y-startPoint.y);[self setNeedsDisplay];
}-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{if (self.delegate && [self.delegate respondsToSelector:@selector(cutImgWithRect:)]) {[self.delegate cutImgWithRect:targetRect];}
}
@end

 

视图控制器:(作为截图视图的代理对象)

#import <UIKit/UIKit.h>
#import "BIDCutView.h"@interface BIDRootViewController : UIViewController <UICutImgDelegate>@end

 

#import "BIDRootViewController.h"
#import "BIDSimpleTouchFun.h"
#import "BIDDiscount.h"@implementation BIDRootViewController-(void)loadView
{[super loadView];
  //
self.view=[[[BIDDrawViewalloc] initWithFrame:CGRectMake(0, 0, 320, 460)] autorelease];
    BIDCutView *cutView=[[BIDCutView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];cutView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"abc.jpg"]];cutView.delegate = self;[self.view addSubview:cutView];[cutView release];
}
- (void)viewDidLoad
{[super viewDidLoad];
}- (void)didReceiveMemoryWarning
{[super didReceiveMemoryWarning];
}-(void)cutImgWithRect:(CGRect)aRect
{UIImage *img=[UIImage imageNamed:@"abc.jpg"];CGImageRef imgRef = img.CGImage;CGImageRef targetImgRef = CGImageCreateWithImageInRect(imgRef, aRect);  //图像的截取UIImage *targetImg=[UIImage imageWithCGImage:targetImgRef];UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, aRect.size.width, aRect.size.height)];imgView.image = targetImg; //把截取得的图像显示到视图中去imgView.tag=1000;[self.view addSubview:imgView];[imgView release];
}-(void)clear
{UIImageView *imgView=(UIImageView *)[self.view viewWithTag:1000];[imgView removeFromSuperview];
}

效果: 

转载于:https://www.cnblogs.com/mingfung-liu/p/3230038.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的map怎么用_python中的map怎么使用

python中的map方法怎么使用&#xff1f;下面给大家介绍一下具体使用的方法&#xff1a;描述map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数&#xff0c;返回包含每次 function 函数返回值的新列表。语法map() 函数语…

关于linux kernel编译的几项关键点:

1. make参数&#xff1a; CROSS_COMPILE即交叉编译器的前缀&#xff08;prefix)&#xff0c;也就是选择将代码编译成目标cpu的指令的工具&#xff0c;如指定makeCROSS_COMPILEarm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc,arm-none-linux-gnueabi-ld等工具将代码…

POJ1033 Defragment

题目来源&#xff1a;http://poj.org/problem?id1033 题目大意&#xff1a; 某操作系统的文件系统中&#xff0c;所有的磁盘空间被分为N个大小相等的cluster&#xff0c;编号1至N。每个文件占用一个或多个cluster。所有没有被文件占用的cluster称为是空闲的。磁盘上的一个文件…

php怎么和数据库通信,php – 如何处理域和数据库层之间的通信?

加布里埃尔,这被称为“impedance matching problem”.有许多解决方案,从重量级的实体bean,如J2EE实体bean到Ruby ActiveRecord,再到简单的手工连接编码.更新好吧,很难在没有更多信息的情况下很难确切地知道如何攻击它,但这是基本的方法.任何这些架构问题都是由性能等非功能性需…

pcb过孔漏铜_【企业资讯】大正瑞地:专注PCB药水二十年,品质、性能可靠

企业简介公司拥有领先的技术及产品、顾问型服务、PCB药水全系列体系化运行。沉铜、电镀、中/超粗化、减铜药水、化镍金、OSP、显影、退膜及辅助物料等全系列PCB药水&#xff0c;自主研发&#xff0c;拥有核心技术&#xff0c;自成体系&#xff0c;可以全面、系统的供应产品及全…

asterisk extconfig.conf文件解析

1. int read_config_maps(void), 定义在main/config.c,被main函数调用&#xff0c;下面开始分析read_config_maps struct ast_config *config, *configtmp; 新建一个配置结构体 configtmp ast_config_new(); 从extconfig_conf即extconfig.conf得到配置信息并存储在config 中…

php微信模板信息发送的代码例子,微信模板消息发送样例

微信模板消息发送样例://先构建一个http发送function http_request($url, $data array()){$ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_S…

前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter

李熠&#xff1a;前端架构 101&#xff08;一&#xff09;&#xff1a;在谈论它们之前我们需要达成的共识​zhuanlan.zhihu.com李熠&#xff1a;前端架构 101&#xff08;二&#xff09;&#xff1a; MVC 初探​zhuanlan.zhihu.com李熠&#xff1a;前端架构 101&#xff08;三&…

[转+整理]十道海量数据处理面试题与十个方法大总结

海量数据处理&#xff1a;十道面试题与十个海量数据处理方法总结 作者&#xff1a;July、youwang、yanxionglu。 时间&#xff1a;二零一一年三月二十六日 本文之总结&#xff1a;教你如何迅速秒杀掉&#xff1a;99%的海量数据处理面试题。有任何问题&#xff0c;欢迎随时交流、…

java fx 建立窗体,3花式窗体与JavaFX CSS

2019独角兽企业重金招聘Python工程师标准>>>3花式窗体与JavaFX CSS本教程是通过添加级联样式表(CSS)来使您的JavaFX应用程序看起来很有吸引力。您开发设计&#xff0c;创建.css文件并应用新样式。在本教程中&#xff0c;您将使用一个使用默认样式进行标签&#xff0c;…

asterisk几个通用函数说明

1. #define ast_config_load(filename, flags) ast_config_load2(filename, AST_MODULE, flags) 加载配置文件filename&#xff0c;并返回一个ast_config结构体指针。 ast_config_load2是调用了 struct ast_config *ast_config_internal_load(const char *filename, struc…

python如何进行格式化输出变量_Python变量格式化输出实现原理解析

print() 函数使用以 % 开头的转换说明符对各种类型的数据进行格式化输出。转换说明符(Conversion Specifier)只是一个占位符(也称为格式化操作符)&#xff0c;它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。转换说明符解释%d、%i转换为带符号的十进…

java json 返回null,[] Spring4 MVC 返回json格式时候 设置不返回null值属性的有关问题...

[求助] Spring4 MVC 返回json格式时候 设置不返回null值属性的问题本帖最后由 bighong0404 于 2015-10-06 12:45:38 编辑背景:使用responseBody设置以json格式返回数据时候. 有时候被返回的对象有些属性是null值, 默认还是会输出. 例如下面代码. 在与移动端交互时候会很浪费流量…

log4j无厘头异常

今天系统升级&#xff0c;是web程序&#xff0c;备份程序之后&#xff0c;替换class下面的com的全部类文件后shutdown tomcat&#xff0c;然后启动程序&#xff0c;startup之后出现 java.lang.NullPointerException at org.apache.log4j.spi.LocationInfo.<init>(Loca…

res_config_mysql和chan_sip模块的加载分析

1. res_config_mysql的模块加载早于chan_sip&#xff0c;他们的加载函数均为load_module 先分析res_config_mysql的load_module函数 parse_config(0); parse_config解析res_config_mysql文件&#xff0c;并用文件中的配置信息填充mysql_conn结构体 我当前的res_config_mysql文件…

如何连接安卓手机_安卓手机如何使用AirPods

苹果公司推出的无线蓝牙耳机AirPods可以说是市面上最好的无线耳机&#xff0c;配合iPhone使用能够给你带来畅快舒适的体验。有很多小米华为oppo&#xff0c;vivo等安卓手机用户也在问了&#xff0c;安卓手机能够支持AirPods呢&#xff0c;答案是肯定的。图片来源&#xff1a;网…

晒一下我的代码生成器

经过最近一段新的尝试【BS架构】,之前的编程一直是CS架构&#xff0c;但也总是在忙那些项目&#xff0c;没法整理出一套符合自己团队的一套编程体系和架构&#xff1b; 新的起点&#xff0c;又是一个新的挑战&#xff0c;现在已经是03年&#xff0c;最早做的时候是07年&a…

discuz viewthread.php,修改discuz论坛的标题header和footer

1、关于去掉DZ论坛标题处的Powered by Discuz!&#xff0c;去掉他的原因是为了使标题更加简洁明了&#xff0c;还有就是不被搜索到导致SPAM&#xff1a;具体的修改方法&#xff1a;打开/templates/default/header.htm&#xff0c;在第五行中直接删除&#xff1a;- Powered by D…

sed命令详解

转载&#xff1a;http://blog.chinaunix.net/u/22677/showart_1076318.html1.简介sed是非交互式的编辑器。它不会修改文件&#xff0c;除非使用shell重定向来保存结果。默认情况下&#xff0c;所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件&#xff08;或输入&#xff…

Oracle中的单值函数

Oracle的函数 Oracle函数可以分为单值函数和分组函数两大类&#xff0c;单值函数又分为字符函数、日期和时间函数、数字函数、转换函数和混合函数&#xff1a;分组函数右count、max、min、avg、sum&#xff0c;都可以和group by 搭配使用。 单值函数 1、 字符函数 l 字符串连…