iOS开发UI篇—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的使用

// // YYViewController.m
// 02-自定义UIimageview
// // Created by apple on 14-6-22.
// Copyright (c) 2014年 itcase. All rights reserved.
//
 #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文件代码如下:

 1 //  2 // YYimageView.h
 3 // 02-自定义UIimageview
 4 //  5 // Created by apple on 14-6-22.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import <UIKit/UIKit.h>
10 11 @interface YYimageView : UIView
12 @property(nonatomic,strong)UIImage *image;
13 @end


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

 1 //  2 // YYimageView.m
 3 // 02-自定义UIimageview
 4 //  5 // Created by apple on 14-6-22.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import "YYimageView.h" 10 11 @implementation YYimageView
12 13 //重写drawRect:方法 14 - (void)drawRect:(CGRect)rect
15 {
16  [self.image drawInRect:rect];
17 }
18 19 @end


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

 1 //  2 // YYViewController.m
 3 // 02-自定义UIimageview
 4 //  5 // Created by apple on 14-6-22.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import "YYViewController.h" 10 #import "YYimageView.h" 11 12 @interface YYViewController ()
13 14 @end 15 16 @implementation YYViewController
17 18 - (void)viewDidLoad
19 {
20  [super viewDidLoad];
21 22 // //系统的UIImageview的使用 23 //// 1.创建一个UIImageView 24 // UIImageView *iv=[[UIImageView alloc]init]; 25 //// 2.设置图片 26 // iv.image=[UIImage imageNamed:@"me"]; 27 //// 3.设置frame 28 // iv.frame=CGRectMake(100, 100, 100, 100); 29 //// 4.把创建的自定义的view添加到界面上 30 // [self.view addSubview:iv];
31 32 33 //自定义UIImageView
34 //1.创建
35 //2.设置图片
36 //3.设置frame
37 //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


三、完善

存在的问题?

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

 1 //  2 // YYViewController.m
 3 // 02-自定义UIimageview
 4 //  5 // Created by apple on 14-6-22.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import "YYViewController.h" 10 #import "YYimageView.h" 11 12 @interface YYViewController ()
13 @property(nonatomic,strong)UIImageView *imageView;
14 @end 15 16 @implementation YYViewController
17 18 - (void)viewDidLoad
19 {
20  [super viewDidLoad];
21 22 //系统的UIImageview的使用
23 // 1.创建一个UIImageView 24 UIImageView *iv=[[UIImageView alloc]init];
25 // 2.设置图片 26 iv.image=[UIImage imageNamed:@"me"];
27 // 3.设置frame 28 iv.frame=CGRectMake(100, 100, 100, 100);
29 // 4.把创建的自定义的view添加到界面上 30  [self.view addSubview:iv];
31 self.imageView=iv;
32 33 34 //自定义UIImageView
35 //1.创建
36 //2.设置图片
37 //3.设置frame
38 //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)btnClick
54 {
55 UIImage *image=[UIImage imageNamed:@"psb.jpeg"];
56 self.imageView.image=image;
57 }
58 @end


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


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

完善后的代码如下:

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

 1 //  2 // YYViewController.m
 3 // 02-自定义UIimageview
 4 //  5 // Created by apple on 14-6-22.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 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 @end 16 17 @implementation YYViewController
18 19 - (void)viewDidLoad
20 {
21  [super viewDidLoad];
22 23 // //系统的UIImageview的使用 24 //// 1.创建一个UIImageView 25 // UIImageView *iv=[[UIImageView alloc]init]; 26 //// 2.设置图片 27 // iv.image=[UIImage imageNamed:@"me"]; 28 //// 3.设置frame 29 // iv.frame=CGRectMake(100, 100, 100, 100); 30 //// 4.把创建的自定义的view添加到界面上 31 // [self.view addSubview:iv];
32 // self.imageView=iv;
33 34 35 //自定义UIImageView
36 //1.创建
37 //2.设置图片
38 //3.设置frame
39 //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)btnClick
56 {
57 NSLog(@"按钮被点击了");
58 UIImage *image=[UIImage imageNamed:@"psb.jpeg"];
59 // self.imageView.image=image; 60 self.yyimageView.image=image;
61 }
62 @end


YYimageView.m文件的代码:

 1 //  2 // YYimageView.m
 3 // 02-自定义UIimageview
 4 //  5 // Created by apple on 14-6-22.
 6 // Copyright (c) 2014年 itcase. All rights reserved.
 7 //
 8  9 #import "YYimageView.h" 10 11 @implementation YYimageView
12 13 //重写drawRect:方法 14 - (void)drawRect:(CGRect)rect
15 {
16  [self.image drawInRect:rect];
17 }
18 19 //重写set方法 20 -(void)setImage:(UIImage *)image
21 {
22 _image=image;
23 [self setNeedsDisplay];
24 }
25 @end

时间: 2025-01-02 20:01:23

iOS开发UI篇—Quartz2D(自定义UIImageView控件)的相关文章

iOS开发UI篇—使用picker View控件完成一个简单的选餐应用

一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162,不可修改. 2.显示数据,需要设置数据源,也有两种方式(成为数据源,遵守协议) 3.实现数据源里面的两个方法 1)返回一共有多少列 2)在这一列中一共有多少行 4.通过代理告诉它那一列的哪一行显示哪些数据(设置其代理为控制器) 5.使用懒加载,加载所有的食物 6.完成基本数据的展示(列,行,内容) 7.自动更新选中的食物信息.(使用一个大的view,上面放6个labe

iOS开发UI篇—Quartz2D简单介绍

一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 二.Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,⾥⾯有各种各样的UI控件 UILabel:显⽰文字 UIImageView:显示图片 UIButton:同时显示图片和⽂字(能点击) 利⽤UIKi

iOS开发UI篇—Quartz2D使用(绘制基本图形)

一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 决定绘制的输出目标(绘制到什么地方去?)(输出目标可以是PDF文件.Bitmap或者显示器的窗口上) 相同的一套绘图序列,指定不同的Graphics Context,就可将相同的图像绘制到不同的目标上. Quartz2D提供了以下几种类型的Graphics Context: Bitmap Graphics Context PDF Graphics Co

iOS开发UI篇—Quartz2D使用(图片剪切)

一.使用Quartz2D完成图片剪切 1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: 1 - (void)drawRect:(CGRect)rect 2 { 3 UIImage *image2=[UIImage imageNamed:@"me"]; 4 [image2 drawAtPoint:CGPointMake(100, 100)]; 5 } 显示: 2.剪切图片让图片圆形展示 思路:先画一个圆,让图片显示在圆的内部,超出

iOS开发UI篇—Quartz2D使用(图形上下文栈)

一.qurza2d是怎么将绘图信息和绘图的属性绘制到图形上下文中去的? 说明: 新建一个项目,自定义一个view类和storyboard关联后,重写该类中的drowrect方法. 画线的三个步骤: (1)获取上下文 (2)绘图 (3)渲染 要求:画两条单独的线 代码和效果图: 1 - (void)drawRect:(CGRect)rect 2 { 3 //获取上下文 4 CGContextRef ctx=UIGraphicsGetCurrentContext(); 5 //绘图 6 //第一条线

iOS开发UI篇—Quartz2D简单使用(三)

一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界面搭建,如图: 代码示例: YYViewController.m文件 1 // 2 // YYViewController.m 3 // 04-对圆进行缩放 4 // 5 // Created by apple on 14-6-11. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 /

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

一.简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏.如图: 完成截屏功能的核心代码:- (void)renderInContext:(CGContextRef)ctx;调用某个view的layer的renderInContext:方法即可 二.代码示例 storyboard界面搭建: 代码: 1 // 2 // YYViewController.m 3 // 01-截屏 4 // 5 // Created by apple on 14-6-12. 6 // Copyr

iOS开发UI篇—Quartz2D简单使用(一)

一.画直线 代码: 1 // 2 // YYlineview.m 3 // 03-画直线 4 // 5 // Created by apple on 14-6-9. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYlineview.h" 10 11 @implementation YYlineview 12 13 14 // 当自定义view第一次显示出来的时候就会调用drawRect方

iOS开发UI篇—Quartz2D使用(绘图路径)

一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径 cgmutablepathref 调用该方法相当于创建了一个路径,这个路径用来保存绘图信息. 2.把绘图信息添加到路径里边. 以前的方法是点的位置添加到ctx(图形上下文信息)中,ctx 默认会在内部创建一个path用来保存绘图信息. 在图形上下文中有一块存储空间专门用来存储绘图信息,其实这块空间就是CGMutablePathRef. 3.把路径添加到上下文中. 代码示例: