Quartz2D(自定义UIImageView控件)

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 <UIKit/UIKit.h>
10
11 @interface YYimageView : UIView
12 @property(nonatomic,strong)UIImage *image;
13 @end

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

 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的使用过程,实现同样的效果。

 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

三、完善

存在的问题?

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

 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文件的代码:

 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文件的代码:

 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

时间: 2024-10-19 14:35:49

Quartz2D(自定义UIImageView控件)的相关文章

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之后,应

iOS--Quartz2D使用(自定义UIImageView控件、绘制基本图形)

自定义UIImageView控件 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义View. 使用Quartz2D自定义View,可以从模仿系统的ImageView的使用开始. 需求驱动开发:模仿系统的imageview的使用过程 1.创建 2.设置图片 3.设置frame 4.把创建的自定义的view添加到界面上(在自定义的View中,需要一个image属性接收image图片参数->5). 5.添加一个image属

猫猫学IOS(二十八)UI之Quartz2D自定义下载控件

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8614731 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果 自定义控件过程 主要过程在上一篇里有介绍了,这里主要介绍下代码实现 先做好要放的view 然后实现呢主要就是四步: 1:获取上下文 2:拼接路径 3:把路径添加到上下文. 4:把上下文渲染到视图 // 1:

(素材源码)猫猫学IOS(二十九)UI之Quartz2D自定义下载控件

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8640353 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果 代码 NYProgressView.m // // NYProgressView.m // 下载进度条 // // Created by apple on 15-4-27. // Copyright (c)

iOS边练边学--(Quartz2D)基本图形的绘制#附加自定义进度控件的练习

一.Quartz2D使用须知 Quartz2D的API是纯C语言的 Quartz2D的API来自于Core Graphics框架 二.<1>通过原始的方法(C语言)绘制简单图形--了解 <2>OC也封装了绘制图形的框架UIKit(贝瑟尔路径)--掌握 三.自定义进度控件的练习,效果图

自定义View控件(2—手写实例代码)

1. 步骤: + 1.自定义一个类继承于UIView + 2.在initWithFrame方法中添加子控件 + 3.在layoutSubviews中设置子控件的位置 + 4.提供一个属性保存外界传入的数据(模型对象), 重写setter方法设置子控件的数据 - 类工厂方法(便利构造器) + 按照苹果的风格和规范, 一般情况一个用于创建对象的对象方法会对应一个类方法 + 可以通过类工厂方法, 快速的根据数据创建一个对象 - 注意点: + 返回值一定要使用instancetype, 不要使用id +

自定义View控件(1—xib实例代码)

/** * 1. 设置显示到控制器上的模型数据(根据plist文件设置其属性,然后定义与实现工厂方法来快速实现字典转模型) */   // 1. 模型Shop.h文件 @interface Shop : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *icon; - (Shop *)initWithDict:(NSDictionary *)dict; +

自定义View控件(手写,xib)须知

 1. 目的 :提高代码的复用性,屏蔽内部的实现细节 2. 步骤 :    * 1> 自定义一个类继承于UIView   * 2> 在initWithFrame方法中添加子控件   * 3> 在layoutSubviews中设置子控件的位置   * 4> 提供一个属性保存外界传入的数据(模型对象), 重写setter方法设置子控件的数据 3. 类工厂方法(便利构造器):   * 按照苹果的风格和规范, 一般情况一个用于创建对象的对象方法会对应一个类方法   * 可以通过类工厂方法,

IOS开发自定义CheckBox控件

IOS本身没有系统的CheckBox组件,但是实际开发中会经常用到,所以专门写了一个CheckBox控件,直接上代码 效果图: UICheckBoxButton.h文件如下: #import #import "Common.h" @interface UICheckBoxButton : UIControl { UILabel *label; UIImageView *icon; BOOL checked; id delegate; } @property (retain, nonat