如何修改控件状态
• 可见,确实需要经常修改控件状态
• 那如何去修改控件的状态呢?方法很简单
➢ 每一个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控件(复习一下)的更多相关文章

  1. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  2. WinForm/Silverlight多线程编程中如何更新UI控件的值

    单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...

  3. 富客户端 wpf, Winform 多线程更新UI控件

    前言 在富客户端的app中,如果在主线程中运行一些长时间的任务,那么应用程序的UI就不能正常相应.因为主线程要负责消息循环,相应鼠标等事件还有展现UI. 因此我们可以开启一个线程来格外处理需要长时间的 ...

  4. IOS学习资源收集--开发UI控件相关

    收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件 正文 ...

  5. 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架

    <深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...

  6. AppleWatch___学习笔记(二)UI布局和UI控件

    1.UI布局 直接开发,你会发现Apple Watch并不支持AutoLayout,WatchKit里有个类叫做WKInterfaceGroup,乍一看像是UIView,但是这货其实是用来布局的.从 ...

  7. (转).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 ...

  8. Atitit. .net c# web 跟客户端winform 的ui控件结构比较

    Atitit. .net c# web 跟客户端winform 的ui控件结构比较 .net   4.5 webform Winform 命名空间 System.Web.UI.WebControls ...

  9. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

    最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...

随机推荐

  1. 开源服务专题之--------mysql的编译安装

    为什么选择MySQL 1:mysql性能卓越,服务稳定,很少出现异常宕机 2:mysql开源免费,无版权制约,自主性及使用成本低 3:产品耦合度,mysql支持多种操作系统,支持多开发语言,特别是ph ...

  2. 线程池ThreadPool的初探

    一.线程池的适用范围 在日常使用多线程开发的时候,一般都构造一个Thread示例,然后调用Start使之执行.如果一个线程它大部分时间花费在等待某个事件响应的发生然后才予以响应:或者如果在一定期间内重 ...

  3. jquery_layout

    http://layout.jquery-dev.com/documentation.cfm

  4. iis7 压缩js文件和启用gzip压缩

    压缩js文件 打开IIS 7的配置文件:c:\windows\system32\inetsrv\config\applicationhost.config 在<staticContent loc ...

  5. .NET invoke NetSuite Restlet

    Please indicate the source if you need to repost. Restlet allows programmers to use the http request ...

  6. UITextView 文本垂直居中

    var center=textView.Bounds.Size.Height - textView.ContentSize.Height; center = center < ? : cente ...

  7. 《Java4android》视频学习笔记——面向对象的应用(一)

    ---恢复内容开始--- 有一台HP打印机需要一个程序来实现开机,打印,关机这三个功能 class HPprinter { void open(){ System.out.println(" ...

  8. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  9. OGNl和ValueStack的基础和深入分析

    一.OGNL 1)什么是OGNL? 解析:OGNL是Object Graph Navigation Language(对象图导航语言)它是强大的表达式语言. 2)用途:通过简单一致的表达式语法来读取和 ...

  10. [Cordova] Plugin开发入门

    [Cordova] Plugin开发入门 Overview Cordova的设计概念,是在APP上透过Web控件来呈现Web页面,让Web开发人员可以操作熟悉的语言.工具来开发APP.使用Web页面来 ...