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; (空色)

时间: 2024-09-30 20:50:32

UI控件的基本使用的相关文章

android_常用UI控件_01_TextView3_点击打开新的activity

点击textview打开新的activity (1) MainActivity.java package com.example.android_textview_opennewactivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.text.SpannableString; import android.text.Spanned;

android_常用UI控件_01_TextView4_rollingsubtitles效果加链接文字

(1)Mainactivity.java package com.example.android_textview_rollingsubtitles; import java.sql.Wrapper; import android.os.Bundle; import android.app.Activity; import android.text.Html; import android.text.TextUtils; import android.text.TextUtils.Truncat

C# WPF 使用委托修改UI控件

近段时间在自学WPF,是一个完全不懂WPF的菜鸟,对于在线程中修改UI控件使用委托做一个记录,给自已以后查询也给需要的参考: 界面只放一个RichTextBox,在窗体启动时开起两个线程,调用两个函数,每隔1秒写一次当前时间 一 界面XAML如下: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&qu

UI控件

在iOSAPP中,能在屏幕上显示的按钮.文本标签.文字输入框等等,都是UI控件. UIview: 苹果把所有UI控件的共同属性抽出来放在UIView中,即所有UI控件都是UIView的子类(不一定是直接子类). 注意:UIView继承自UIresponder,可以响应用户的操作. UIView的重要属性 frame:View的位置和宽高 bounce:相对于自己的左上角的位置和宽高 center:中心点的坐标 backgroundcolor:背景颜色 UIView的常用方法:UIView既可以显

Atitit.swt&#160;线程调用ui控件的方法

Atitit.swt 线程调用ui控件的方法 1 SwingUtilities.invokeLater1 2 display.asyncExec方法1 3  display.timerExec(500,timer);2 4 .但有时候并不一定要程序执行时就要定时检测,有时需要外部事情激发这就出现了第2种解决方案,写一个内置类,可以放在事件监听的方法中,然后激发:2 5 参考3 1   SwingUtilities.invokeLater SwingUtilities.invokeLater(ne

iOS UI控件没有显示时的调试技巧

1.遇到UI控件没有显示的问题,可以给这个控件设置背景色 假设这个控件是UIBUtton 如果背景色能显示,那问题就出在image和title值为空 如果背景色不能显示,重写控件的description方法,把控件的frame打印出来分析 2.以下是打印UIView的frame的分类 #import <UIKit/UIKit.h> @interface UIView (Log) @end 1 #import "UIView+Log.h" 2 3 @implementatio

JavaFX - UI控件 - 标签

  2标签(Label) 本章主要介绍如何使用标签(Label),该类位于JavaFX API的javafx.scene.control包中,用于显示一个文本元素. 接下来会介绍如何让文本元素自动换行来适应受限空间,添加一个图标,或使用视觉特效. 图2 - 1显示了标签的三种常见用法. 左边的标签是一个带图标的文本,中间的展示了旋转效果,右边的使用了自动换行设置. 图2 - 1 标签示例 这幅图显示了三个标签,他们被放在了同一行. 左边的标签有一个看起来像个放大镜的图标和一个"Searc

根据ui控件的字体计算占用的长度

//1.根据icon计算name的长度 CGFloat nameX = CGRectGetMaxX(_icon.frame) + kBorder; CGFloat nameY = iconY; //计算用户昵称的长度 CGSize nameSize = [_weiBo.name sizeWithFont:_name.font]; _name.frame = CGRectMake(nameX, nameY, nameSize.width, nameSize.height); //2.设置vip的f

《深入理解Windows Phone 8.1 UI控件编程》

<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的动画.掌握布局原理.列表虚拟化原理.高性能列表实现.图表编程.控件原理等. 目录如下: <深入理解Windows Phone 8 .1 UI控件编程>目录 第1章 深入解析程序界面 1.1 XAML的原理 1.1.1 XAML的概念 1.1.2 XAML页面的编译 1.1.3 动态加载XAML 1

android_常用UI控件_01_TextView2

显示图片和文字 MainActivity.java package com.example.android_textview_showqqface; import java.lang.reflect.Field; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.Drawable; import android