iOS开发UI篇—手写控件,frame,center和bounds属性
一、手写控件
在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力!
设置控件监听方法的示例代码如下:
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
提示:
1> addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方法
2> 监听方法的第一个参数就是对象本身
3> 监听方法的第二个参数是监听控件的事件
3.代码示例
1 //1.使用类创建一个按钮对象 2 // UIButton *headbtn=[[UIButton alloc] initWithFrame:CGRectMake(100 ,100, 100, 100)]; 3 //设置按钮对象为自定义型 4 UIButton *headbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 5 6 //2.设置对象的各项属性 7 //(1)位置等通用属性设置 8 headbtn.frame=CGRectMake(100, 100, 100, 100); 9 10 //(2)设置普通状态下按钮的属性 11 [headbtn setBackgroundImage:[UIImage imageNamed:@"i"] forState:UIControlStateNormal]; 12 [headbtn setTitle:@"点我!" forState:UIControlStateNormal]; 13 [headbtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 14 15 //(3)设置高亮状态下按钮的属性 16 [headbtn setBackgroundImage:[UIImage imageNamed:@"a"] forState:UIControlStateHighlighted]; 17 [headbtn setTitle:@"还行吧~" forState:UIControlStateHighlighted]; 18 [headbtn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; 19 20 //3.把对象添加到视图中展现出来 21 [self.view addSubview:headbtn]; 22 //注意点! 23 self.headImageView=headbtn;
二、frame,center和bounds属性
(1)通过以下属性可以修改控件的位置
frame.origin
center
(2)通过以下属性可以修改控件的尺寸
frame.size
bounds.size
3.代码示例
一个控制图片上下左右平移,缩放的程序(frame、center和bounds属性)
1 // 2 // YYViewController.m 3 // 01-练习使用按钮的frame和center属性 4 // 5 // Created by apple on 14-5-21. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 //私有扩展 12 @interface YYViewController () 13 14 @property(nonatomic,weak)IBOutlet UIButton *headImageView; 15 @end 16 17 @implementation YYViewController 18 19 //枚举类型,从1开始 20 typedef enum 21 { 22 ktopbtntag=1, 23 kdownbtntag, 24 krightbtntag, 25 kleftbtntag 26 }btntag; 27 28 //viewDidLoad是视图加载完成后调用的方法,通常在此方法中执行视图控制器的初始化工作 29 - (void)viewDidLoad 30 { 31 32 //在viewDidLoad方法中,不要忘记调用父类的方法实现 33 [super viewDidLoad]; 34 35 36 //手写控件代码 37 //一、写一个按钮控件,上面有一张图片 38 39 //1.使用类创建一个按钮对象 40 // UIButton *headbtn=[[UIButton alloc] initWithFrame:CGRectMake(100 ,100, 100, 100)]; 41 //设置按钮对象为自定义型 42 UIButton *headbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 43 44 //2.设置对象的各项属性 45 //(1)位置等通用属性设置 46 headbtn.frame=CGRectMake(100, 100, 100, 100); 47 48 //(2)设置普通状态下按钮的属性 49 [headbtn setBackgroundImage:[UIImage imageNamed:@"i"] forState:UIControlStateNormal]; 50 [headbtn setTitle:@"点我!" forState:UIControlStateNormal]; 51 [headbtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 52 53 //(3)设置高亮状态下按钮的属性 54 [headbtn setBackgroundImage:[UIImage imageNamed:@"a"] forState:UIControlStateHighlighted]; 55 [headbtn setTitle:@"还行吧~" forState:UIControlStateHighlighted]; 56 [headbtn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; 57 58 //3.把对象添加到视图中展现出来 59 [self.view addSubview:headbtn]; 60 //注意点! 61 self.headImageView=headbtn; 62 63 64 //二、写四个控制图片左右上下移动方向的按钮控件 65 66 /**================向上的按钮=====================*/ 67 //1.创建按钮对象 68 UIButton *topbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 69 70 //2.设置对象的属性 71 topbtn.frame=CGRectMake(100, 250, 40, 40); 72 [topbtn setBackgroundImage:[UIImage imageNamed:@"top_normal"] forState:UIControlStateNormal]; 73 [topbtn setBackgroundImage:[UIImage imageNamed:@"top_highlighted"] forState:UIControlStateHighlighted]; 74 [topbtn setTag:1]; 75 //3.把控件添加到视图中 76 [self.view addSubview:topbtn]; 77 78 //4.按钮的单击控制事件 79 [topbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside]; 80 81 82 /**================向下的按钮=====================*/ 83 //1.创建按钮对象 84 UIButton *downbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 85 //2.设置对象的属性 86 downbtn.frame=CGRectMake(100, 350, 40, 40); 87 [downbtn setBackgroundImage:[UIImage imageNamed:@"bottom_normal"] forState:UIControlStateNormal]; 88 [downbtn setBackgroundImage:[UIImage imageNamed:@"bottom_highlighted"] forState:UIControlStateHighlighted]; 89 [downbtn setTag:2]; 90 //3.把控件添加到视图中 91 [self.view addSubview:downbtn]; 92 93 //4.按钮的单击控制事件 94 [downbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside]; 95 96 97 /**================向左的按钮=====================*/ 98 //1.创建按钮对象 99 UIButton *leftbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 100 //2.设置对象的属性 101 leftbtn.frame=CGRectMake(50, 300, 40, 40); 102 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal]; 103 [leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted]; 104 [leftbtn setTag:4]; 105 //3.把控件添加到视图中 106 [self.view addSubview:leftbtn]; 107 108 //4.按钮的单击控制事件 109 [leftbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside]; 110 111 112 113 /**================向右的按钮=====================*/ 114 //1.创建按钮对象 115 UIButton *rightbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 116 //2.设置对象的属性 117 rightbtn.frame=CGRectMake(150, 300, 40, 40); 118 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal]; 119 [rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted]; 120 [rightbtn setTag:3]; 121 //3.把控件添加到视图中 122 [self.view addSubview:rightbtn]; 123 124 //4.按钮的单击控制事件 125 [rightbtn addTarget:self action:@selector(Click:) forControlEvents:UIControlEventTouchUpInside]; 126 127 //三、写两个缩放按钮 128 /**================放大的按钮=====================*/ 129 //1.创建对象 130 UIButton *plusbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 131 //2.设置属性 132 plusbtn.frame=CGRectMake(75, 400, 40, 40); 133 [plusbtn setBackgroundImage:[UIImage imageNamed:@"plus_normal"] forState:UIControlStateNormal]; 134 [plusbtn setBackgroundImage:[UIImage imageNamed:@"plus_highlighted"] forState:UIControlStateHighlighted]; 135 [plusbtn setTag:1]; 136 //3.添加到视图 137 [self.view addSubview:plusbtn]; 138 //4.单击事件 139 [plusbtn addTarget:self action:@selector(Zoom:) forControlEvents:UIControlEventTouchUpInside]; 140 141 142 /**================缩小的按钮=====================*/ 143 UIButton *minusbtn=[UIButton buttonWithType:UIButtonTypeCustom]; 144 minusbtn.frame=CGRectMake(125, 400, 40, 40); 145 [minusbtn setBackgroundImage:[UIImage imageNamed:@"minus_normal"] forState:UIControlStateNormal]; 146 [minusbtn setBackgroundImage:[UIImage imageNamed:@"minus_highlighted"] forState:UIControlStateHighlighted]; 147 [minusbtn setTag:0]; 148 [self.view addSubview:minusbtn]; 149 [minusbtn addTarget:self action:@selector(Zoom:) forControlEvents:UIControlEventTouchUpInside]; 150 } 151 152 //控制方向的多个按钮调用同一个方法 153 -(void)Click:(UIButton *)button 154 { 155 156 //练习使用frame属性 157 //CGRect frame=self.headImageView.frame; 158 159 /**注意,这里如果控制位置的两个属性frame和center同时使用的话,会出现很好玩的效果,注意分析*/ 160 //练习使用center属性 161 CGPoint center=self.headImageView.center; 162 switch (button.tag) { 163 case ktopbtntag: 164 center.y-=30; 165 break; 166 case kdownbtntag: 167 center.y+=30; 168 break; 169 case kleftbtntag: 170 //发现一个bug,之前的问题是因为少写了break,造成了它们的顺序执行,sorry 171 //center.x=center.x-30; 172 center.x-=50; 173 break; 174 case krightbtntag: 175 center.x+=50; 176 break; 177 } 178 179 // self.headImageView.frame=frame; 180 181 //首尾式设置动画效果 182 [UIView beginAnimations:nil context:nil]; 183 self.headImageView.center=center; 184 //设置时间 185 [UIView setAnimationDuration:2.0]; 186 [UIView commitAnimations]; 187 NSLog(@"移动!"); 188 189 } 190 -(void)Zoom:(UIButton *)btn 191 { 192 //使用frame,以自己的左上角(自己的原点)为原点 193 // CGRect frame=self.headImageView.frame; 194 // if (btn.tag) { 195 // frame.size.height+=30; 196 // frame.size.width+=30; 197 // } 198 // else 199 // { 200 // frame.size.width-=50; 201 // frame.size.height-=50; 202 // } 203 // self.headImageView.frame=frame; 204 205 206 //使用bounds,以中心点位原点进行缩放 207 CGRect bounds = self.headImageView.bounds; 208 if (btn.tag) { 209 bounds.size.height+=30; 210 bounds.size.width+=30; 211 } 212 else 213 { 214 bounds.size.height-=50; 215 bounds.size.width-=50; 216 } 217 218 //设置首尾动画 219 [UIView beginAnimations:nil context:nil]; 220 self.headImageView.bounds=bounds; 221 [UIView setAnimationDuration:2.0]; 222 [UIView commitAnimations]; 223 } 224 @end
实现效果:
三、简单的动画效果
iOS开发UI篇—手写控件,frame,center和bounds属性相关推荐
- iOS开发UI基础—手写控件,frame,center和bounds属性
iOS开发UI基础-手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...
- iOS开发UI篇—实现UITableview控件数据刷新
iOS开发UI篇-实现UITableview控件数据刷新 一.项目文件结构和plist文件 二.实现效果 1.说明:这是一个英雄展示界面,点击选中行,可以修改改行英雄的名称(完成数据刷新的操作). 运 ...
- iOS开发UI篇—UIScrollView控件介绍
iOS开发UI篇-UIScrollView控件介绍 一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ...
- iOS开发UI篇—Date Picker和UITool Bar控件简单介绍
iOS开发UI篇-Date Picker和UITool Bar控件简单介绍 一.Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何 ...
- iOS开发UI篇—UITableview控件基本使用
iOS开发UI篇-UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) 1 #import <Foundation/Foundation.h&g ...
- iOS开发UI篇—UITableview控件使用小结
iOS开发UI篇-UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...
- iOS开发UI篇—transframe属性(形变)
iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...
- iOS开发UI篇—实现一个私人通讯录小应用(一)
iOS开发UI篇-实现一个私人通讯录小应用(一) 一.该部分主要完成内容 1.界面搭建 2.功能说明 (1).只有当账号和密码输入框都有值的时候,登录按钮 ...
- iOS开发UI篇—多控制器和导航控制器简单介绍
iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...
最新文章
- 优秀的程序反而是廉价
- linux centos 7安装 apache php 及mariadb
- Spring Validation 最佳实践及其实现原理,参数校验没那么简单!
- 疯狂ios讲义之美化iOS应用
- SAP License:如何学好SAP BASIS
- 关于简历的一点心得(纯属个人想法,非专业人士,欢迎批评指正~)
- Power BI for Office 365 概览
- scp 不输入密码登录
- 离散数学 —— 代数系统(二元运算、封闭性、结合律、幺元、零元、逆元、半群、独异点、群、子群、循环群、置换群、陪集)
- Win11热键冲突怎么解决?
- linux中的.sh文件是什么
- 社会生活——《哥哥又逃票了》
- 序列模型第二周作业1:Operations on word vectors
- html页面长按保存图片,h5长按保存图片
- ubuntu18.04 台式机无线网卡TPLink WDN5200H2.0驱动安装
- 局域网共享上网IP设置
- 什么是Restful风格
- PACS系统源码,大型医院PACS源码集成三维重建
- 2022年5月协会与各专委会大事记
- 房产地籍数据精度表格
热门文章
- 【EventBus】Subscribe 注解分析 ( Subscribe 注解属性 | threadMode 线程模型 | POSTING | MAIN | MAIN_ORDERED | ASYNC)
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
- 【Flutter】Animation 动画 ( AnimatedWidget 动画使用流程 | 创建动画控制器 | 创建动画 | 创建 AnimatedWidget 动画组件 | 动画运行 )
- 【DBMS 数据库管理系统】OLTP 联机事务处理 与 OLAP 联机分析处理 ( 数据仓库 与 OLAP | OLAP 联机分析处理 | OLTP 与 OLAP 区别 )
- 【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
- MyBatis基本运行环境
- hihocoder 1320 压缩字符串(字符串+dp)
- Java NIO系列教程(七) FileChannel
- 关于 微软必应词典客户端(pc) 的案例分析
- 用tableView实现的一种加载数据的布局