博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz2D(自定义UIImageView控件)
阅读量:6082 次
发布时间:2019-06-20

本文共 5576 字,大约阅读时间需要 18 分钟。

Quartz2D(自定义UIImageView控件)

一、实现思路

Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义View。
使用Quartz2D自定义View,可以从模仿系统的ImageView的使用开始。
需求驱动开发:模仿系统的imageview的使用过程
1.创建
2.设置图片
3.设置frame
4.把创建的自定义的view添加到界面上(在自定义的View中,需要一个image属性接收image图片参数->5)。
5.添加一个image属性(接下来,拿到image之后,应该把拿到的这个image给渲染出来。怎么渲染?自定义的view怎么把图片显示出来?->把图片给画出来,所以需要重写自定义View的drawRect:方法)。
6.重写自定义View的drawRect:方法,在该方法内部画出图形。
二、代码实现
  系统自带的ImageView的使用
#import "YYViewController.h"@interface YYViewController ()@end@implementation YYViewController- (void)viewDidLoad{    [super viewDidLoad];    //系统的UIImageview的使用//    1.创建一个UIImageView    UIImageView *iv=[[UIImageView alloc]init];//    2.设置图片    iv.image=[UIImage imageNamed:@"me"];//    3.设置frame    iv.frame=CGRectMake(100, 100, 100, 100);//    4.把创建的自定义的view添加到界面上    [self.view addSubview:iv];}@end

实现效果:

使用Quartz2D自定义View,代码如下:

新建一个自定义的类,让其继承自UIView,YYimageView.h文件代码如下:

8  9 #import 
10 11 @interface YYimageView : UIView12 @property(nonatomic,strong)UIImage *image;13 @end

  在自定义类的实现中,重写DrawRect:方法绘制并渲染图形。YYimageView.m文件代码如下:

9 #import "YYimageView.h"10 11 @implementation YYimageView12 13 //重写drawRect:方法14 - (void)drawRect:(CGRect)rect15 {16     [self.image drawInRect:rect];17 }18 19 @end

在主控制器中,模仿系统自带的UIImageView的使用过程,实现同样的效果。

8  9 #import "YYViewController.h"10 #import "YYimageView.h"11 12 @interface YYViewController ()13 14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20     [super viewDidLoad];21     22 //    //系统的UIImageview的使用23     1.创建一个UIImageView24 //    UIImageView *iv=[[UIImageView alloc]init];25     2.设置图片26 //    iv.image=[UIImage imageNamed:@"me"];27     3.设置frame28 //    iv.frame=CGRectMake(100, 100, 100, 100);29     4.把创建的自定义的view添加到界面上30 //    [self.view addSubview:iv];31     32     33     //自定义UIImageView34     //1.创建35     //2.设置图片36     //3.设置frame37     //4.把创建的自定义的view添加到界面上38     YYimageView *yyiv=[[YYimageView alloc]init];39     yyiv.image=[UIImage imageNamed:@"me"];40     yyiv.frame=CGRectMake(100, 100, 100, 100);41     [self.view addSubview:yyiv];42 43 }44 @end

三、完善

存在的问题?

在界面上,添加一个按钮,要求点击按钮,能够实现图片的切换。

8  9 #import "YYViewController.h"10 #import "YYimageView.h"11 12 @interface YYViewController ()13 @property(nonatomic,strong)UIImageView *imageView;14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20     [super viewDidLoad];21     22     //系统的UIImageview的使用23 //    1.创建一个UIImageView24     UIImageView *iv=[[UIImageView alloc]init];25 //    2.设置图片26     iv.image=[UIImage imageNamed:@"me"];27 //    3.设置frame28     iv.frame=CGRectMake(100, 100, 100, 100);29 //    4.把创建的自定义的view添加到界面上30     [self.view addSubview:iv];31     self.imageView=iv;32     33     34     //自定义UIImageView35     //1.创建36     //2.设置图片37     //3.设置frame38     //4.把创建的自定义的view添加到界面上39 //    YYimageView *yyiv=[[YYimageView alloc]init];40 //    yyiv.image=[UIImage imageNamed:@"me"];41 //    yyiv.frame=CGRectMake(100, 100, 100, 100);42 //    [self.view addSubview:yyiv];43     44     //添加一个button按钮,当点击button按钮的时候,切换图片45     UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)];46     [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];47     [btn setTitle:@"点击切换" forState:UIControlStateNormal];48     [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];49     [self.view addSubview:btn];50 51 }52 53 -(void)btnClick54 {55     UIImage *image=[UIImage imageNamed:@"psb.jpeg"];56     self.imageView.image=image;57 }58 @end

点击按钮后,实现图片的切换。

说明:系统的UIimage可以替换。而自定义imageview不会变换,因为自定义的view要想换图片,需要重新绘制并渲染一次图片。所以在拿到替换图片的时候,需要重新绘制一次图片,重写setimage方法。

完善后的代码如下:

主控制器中,YYViewController.m文件的代码:

8  9 #import "YYViewController.h"10 #import "YYimageView.h"11 12 @interface YYViewController ()13 @property(nonatomic,strong)UIImageView *imageView;14 @property(nonatomic,strong)YYimageView *yyimageView;15 @end16 17 @implementation YYViewController18 19 - (void)viewDidLoad20 {21     [super viewDidLoad];22     23 //    //系统的UIImageview的使用24     1.创建一个UIImageView25 //    UIImageView *iv=[[UIImageView alloc]init];26     2.设置图片27 //    iv.image=[UIImage imageNamed:@"me"];28     3.设置frame29 //    iv.frame=CGRectMake(100, 100, 100, 100);30     4.把创建的自定义的view添加到界面上31 //    [self.view addSubview:iv];32 //    self.imageView=iv;33     34     35     //自定义UIImageView36     //1.创建37     //2.设置图片38     //3.设置frame39     //4.把创建的自定义的view添加到界面上40     YYimageView *yyiv=[[YYimageView alloc]init];41     yyiv.image=[UIImage imageNamed:@"me"];42     yyiv.frame=CGRectMake(100, 100, 100, 100);43     [self.view addSubview:yyiv];44     self.yyimageView=yyiv;45     46     //添加一个button按钮,当点击button按钮的时候,切换图片47     UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)];48     [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];49     [btn setTitle:@"点击切换" forState:UIControlStateNormal];50     [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];51     [self.view addSubview:btn];52 53 }54 55 -(void)btnClick56 {57     NSLog(@"按钮被点击了");58     UIImage *image=[UIImage imageNamed:@"psb.jpeg"];59 //    self.imageView.image=image;60     self.yyimageView.image=image;61 }62 @end

YYimageView.m文件的代码:

8  9 #import "YYimageView.h"10 11 @implementation YYimageView12 13 //重写drawRect:方法14 - (void)drawRect:(CGRect)rect15 {16     [self.image drawInRect:rect];17 }18 19 //重写set方法20 -(void)setImage:(UIImage *)image21 {22     _image=image;23     [self setNeedsDisplay];24 }25 @end

转载于:https://www.cnblogs.com/crash-wu/p/4797349.html

你可能感兴趣的文章
[转] PostgreSQL学习手册(数据表)
查看>>
HDU-1159 Common Subsequence(动态规划2)
查看>>
spl_autoload_register更改框架文件引用模式
查看>>
diff文件生成小记
查看>>
RN中有两种方式使用全局变量
查看>>
处理 Oracle SQL in 超过1000 的解决方案
查看>>
maven项目在eclipse的library中没有Maven Dependencies
查看>>
RN初始化环境快速配置
查看>>
10.Lambda表达式入门
查看>>
maven jar 导入本地仓库
查看>>
ExtentTestNGIReporterListener
查看>>
UIView
查看>>
Layer Filters
查看>>
微信小程序 解决 数字粗细不一 的bug
查看>>
mock.js 的用法 -- 脱离后端独立开发,实现增删改查功能
查看>>
FJ省队集训最终测试 T2
查看>>
PHP csv文件内容转成数组/Json
查看>>
[结题报告]11479 - Is this the easiest problem? Time limit: 1.000 seconds
查看>>
php中使用linux命令四大步骤
查看>>
neo4j安装与示例
查看>>