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
复制代码
目录
相关文章
|
1月前
|
前端开发 编解码 数据格式
浅谈响应式编程在企业级前端应用 UI 开发中的实践
浅谈响应式编程在企业级前端应用 UI 开发中的实践
24 0
浅谈响应式编程在企业级前端应用 UI 开发中的实践
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
36 3
|
1月前
|
iOS开发 UED
实现一个自定义的iOS动画效果
【4月更文挑战第9天】本文将详细介绍如何在iOS平台上实现一个自定义的动画效果。我们将通过使用Core Animation框架来实现这个动画效果,并展示如何在不同的场景中使用它。文章的目标是帮助读者理解如何使用Core Animation框架来创建自定义动画,并提供一个简单的示例代码。
18 1
|
10天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
1天前
UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡
UI开发第四篇——实现像handcent sms或者chomp sms那样的气泡
|
10天前
|
前端开发 测试技术 持续交付
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
【4月更文挑战第30天】本文探讨了 Flutter 应用中UI测试和自动化测试的重要性,包括保障质量、提高效率和增强开发信心。Flutter提供`flutter_test`库进行Widget测试,以及`flutter_driver`进行集成测试。UI测试涵盖界面布局、交互和状态变化的验证,最佳实践建议尽早引入测试、保持用例简洁,并结合手动测试。未来,随着Flutter技术发展,UI测试和自动化测试将更加完善,助力开发高质量应用。
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
|
10天前
|
前端开发 搜索推荐 UED
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
【4月更文挑战第30天】探索Flutter的高级UI组件,如`TabBar`、`Drawer`、`BottomSheet`,提升应用体验和美观度。使用高级组件能节省开发时间,提供内置交互逻辑和优秀视觉效果。示例代码展示了如何实现底部导航栏、侧边导航和底部弹出菜单。同时,自定义组件允许个性化设计和功能扩展,但也带来性能优化和维护挑战。参考Flutter官方文档和教程,深入学习并有效利用这些组件。
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
|
11天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
31 0
|
11天前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
|
11天前
|
存储 安全 Swift
【Swift 开发专栏】使用 Swift 开发一个简单的 iOS 应用
【4月更文挑战第30天】本文介绍了使用 Swift 开发简单 iOS 待办事项应用的步骤。首先,阐述了 iOS 开发的吸引力及 Swift 语言的优势。接着,详细说明了应用的需求和设计,包括添加、查看和删除待办事项的功能。开发步骤包括创建项目、界面搭建、数据存储、功能实现,并提供了相关代码示例。最后,强调了实际开发中需注意的细节和优化,旨在帮助初学者掌握 Swift 和 iOS 开发基础。