UI控件(复习一下)
如何修改控件状态
• 可见,确实需要经常修改控件状态
• 那如何去修改控件的状态呢?方法很简单
➢ 每一个UI控件都是一个对象
➢ 修改UI控件的状态,其实就是修改控件对象的属性
➢ 比如修改UILabel显示的文字,就修改UILabel对象的text属性即可
➢ 比如修改UIImageView显示的图片,就修改UIImageView对象的image属性即可
• 不难想到,每一个UI控件肯定都有很多属性,比如:
➢ UIProgressView进度条控件有progress属性(进度值)
➢ UILabel和UITextField都有text属性(显示文字)
➢......
虽然,每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,
比如每一个UI控 件都有自己的位置和尺寸、都有自己的父控件、子控件。
于是,所有的UI控件最终都继承自 UIView,UI控件的公共属性都定义在UIView中,
比如:
UIView的常见属性
➢ @property(nonatomic,readonly) UIView *superview;
➢ 获得自己的父控件对象
➢ @property(nonatomic,readonly,copy) NSArray *subviews;
➢ 获得自己的所有子控件对象
➢ @property(nonatomic) NSInteger tag;
➢ 控件的ID\标识,父控件可以通过tag来找到对应的子控件
➢ @property(nonatomic) CGAffineTransform transform;
➢ 控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)
@property(nonatomic) CGRect frame; 控件所在矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)
@property(nonatomic) CGRect bounds; 控件所在矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x\y一般
为0)
@property(nonatomic) CGPoint center;
控件中点的位置(以父控件的左上角为坐标原点)
在UIKit中,坐标系的原点(0,0)在左上角,x值向右正向延伸,y值向下正向延伸
UIView的常见方法
➢ - (void)addSubview:(UIView *)view;
➢ 添加一个子控件view
➢ - (void)removeFromSuperview;
➢ 从父控件中移除
➢ - (UIView *)viewWithTag:(NSInteger)tag;
➢ 根据一个tag标识找出对应的控件(一般都是子控件)
去除autolayout
• 如果发现通过代码无法修改控件的位置 或者尺寸时,应该去掉storyboard里面的 autolayout功能,这是自iOS6开始出现的 特性
• 顾名思义,autolayout是用来自动布局 的,用来束缚控件的位置和尺寸。去掉 这个功能,控件的位置和尺寸就不再有 一些固定的束缚。
UIButton的状态
• normal(普通状态)
➢ 默认情况(Default)
➢ 对应的枚举常量:UIControlStateNormal
• highlighted(高亮状态)
➢ 按钮被按下去的时候(手指还未松开)
➢ 对应的枚举常量:UIControlStateHighlighted
• disabled(失效状态,不可用状态)
➢ 如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
➢ 对应的枚举常量:UIControlStateDisabled
设置按钮的背景图片
• 设置按钮在不同状态下的背景图片 (为了保证高亮状态下的图片正常显示,必须设置按钮的type为custom)
修改头像按钮的位置
• 通过修改控件的frame属性就可以修改控件在屏幕上的位置和尺寸
• 比如点击“向上”按钮,让按钮的y值减小即可
- (IBAction)top:(UIButton *)sender {
CGRect btnFrame = self.headBtn.frame;
btnFrame.origin.y -= 10;
self.headBtn.frame = btnFrame;
}
• 下面代码是错误的,OC语法规定:不允许直接修改对象的结构体属性的成员
self.headBtn.frame.origin.y -= 10;
实现简单动画
• 在iOS开发中,想实现一些小动画是非常容易的
➢ 系统会根据某个属性值的改变⾃自动形成动画
➢ 比如x值本来是10,然后x值突然改为了100,系统会通过平移动画的方式让x值慢慢从 10变到100
• 简易动画大致有2种方式:
➢ 头尾式
[UIView beginAnimations:nil context:nil]; /** 需要执行动画的代码 **/
[UIView commitAnimations];
➢ Block式
[UIView animateWithDuration:0.5 animations:^{
/** 需要执行动画的代码 **/ }];
修改控件的位置和尺寸
• 通过以下属性可以修改控件的位置 ➢ frame.origin
➢ center
• 通过以下属性可以修改控件的尺寸 ➢ frame.size
➢ bounds.size
transform属性
利用transform属性可以修改控件的位移(位置)、缩放、旋转
创建一个transform属性
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
➢ (angle是弧度制,并不是角度制)
在某个transform的基础上进行叠加
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat
ty);
CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);
• 清空之前设置的transform属性
view.transform = CGAffineTransformIdentity;
常见类型
• 一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色
➢ + (UIColor *)blackColor;
➢ + (UIColor *)darkGrayColor;
➢ + (UIColor *)lightGrayColor;
➢ + (UIColor *)whiteColor;
➢ + (UIColor *)grayColor;
➢ + (UIColor *)redColor;
➢ + (UIColor *)greenColor;
➢ + (UIColor *)blueColor;
➢ + (UIColor *)cyanColor;
➢ + (UIColor *)yellowColor;
➢ + (UIColor *)magentaColor;
➢ + (UIColor *)orangeColor;
➢ + (UIColor *)purpleColor;
➢ + (UIColor *)brownColor;
➢ + (UIColor *)clearColor; (空色)
UI控件(复习一下)的更多相关文章
- ANDROID L——Material Design详解(UI控件)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...
- WinForm/Silverlight多线程编程中如何更新UI控件的值
单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...
- 富客户端 wpf, Winform 多线程更新UI控件
前言 在富客户端的app中,如果在主线程中运行一些长时间的任务,那么应用程序的UI就不能正常相应.因为主线程要负责消息循环,相应鼠标等事件还有展现UI. 因此我们可以开启一个线程来格外处理需要长时间的 ...
- IOS学习资源收集--开发UI控件相关
收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件 正文 ...
- 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架
<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...
- AppleWatch___学习笔记(二)UI布局和UI控件
1.UI布局 直接开发,你会发现Apple Watch并不支持AutoLayout,WatchKit里有个类叫做WKInterfaceGroup,乍一看像是UIView,但是这货其实是用来布局的.从 ...
- (转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例
http://2sharings.com/2014/net-4-5-task-run-parallel-for-winform-cross-multiple-threads-update-ui-dem ...
- Atitit. .net c# web 跟客户端winform 的ui控件结构比较
Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net 4.5 webform Winform 命名空间 System.Web.UI.WebControls ...
- Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...
随机推荐
- ClojureScript魔法堂:搭建开发环境
一.前言 当看到Lisp等函数式编程语言的语法是 (say (concat "hello" "world")) 这样的时候,我就有种深入学习的冲动,因为它的语法 ...
- MVC中Action参数绑定的过程
一.题外话 上一篇:MVC中Action的执行过程 ControllerContext 封装有了与指定的 RouteBase 和 ControllerBase 实例匹配的 HTTP 请求的信息. 二. ...
- 【原创】Kakfa api包源代码分析
既然包名是api,说明里面肯定都是一些常用的Kafka API了. 一.ApiUtils.scala 顾名思义,就是一些常见的api辅助类,定义的方法包括: 1. readShortString: 从 ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1)
前面俩种实现中,很多内部细节都无法知道,微软的框架也是为了屏蔽具体实现,只让我们关注接口.但是人都是充满好奇的,依赖注入到底是怎么实现的呢? 微软又有怎样的实现呢?下面就为大家一一呈现(说实话,代码真 ...
- c#隐藏和重写基类方法的异同
最近正在学习c#,对其中的方法重写和隐藏的概念很是模糊,现在将其归纳如下: 1:方法重写:就是在基类中的方法用virtual关键字来标识,然后在继承类中对该类进行重写(override),这样基类中的 ...
- Bootstrap学习笔记系列5------Bootstrap图片显示
通过添加一下的class来实现bootstrap对图片的支持 img-round 通过border-radius:6px 来获得图片圆角 img-circle 通过border-radius:50%来 ...
- Lua使用心得(1)
这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口.组件,随便你怎么叫),希望能用脚本来控制主程序的行为.这实 ...
- C#编程总结(五)多线程带给我们的一些思考
C#编程总结(五)多线程带给我们的一些思考 如有不妥之处,欢迎批评指正. 1.什么时候使用多线程? 这个问题,对于系统架构师.设计者.程序员,都是首先要面对的一个问题. 在什么时候使用多线程技术? 在 ...
- sql中 in , not in , exists , not exists效率分析
in和exists执行时,in是先执行子查询中的查询,然后再执行主查询.而exists查询它是先执行主查询,即外层表的查询,然后再执行子查询. exists 和 in 在执行时效率单从执行时间来说差不 ...
- 内存只有4G的MBP要怎么破
开发工具包括浏览器都是极占内存的,没有个8G根本不行啊. 怎一个慢字了得? 补记: 放弃谷歌浏览器是正道