iOS开发UI篇—Quartz2D(自定义UIImageView控件)

简介: iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一、实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义View。

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

 

目录
相关文章
|
6月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
372 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
5月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
143 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
7月前
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
316 38
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
|
7月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
242 66
|
5月前
|
人工智能 程序员 API
iOS|记一名 iOS 开发新手的前两次 App 审核经历
啥,这玩意也有新手保护期?
91 0
|
7月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
629 11
|
7月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
277 3
|
7月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
87 15
|
2月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
89 11