IOS基本控件知识点总结(一)

1.退出键盘的两种?方式

• resignFirstResponder
? 当叫出键盘的那个控件(第?一响应者)调用这个?方法时,就能退出键盘

• endEditing

? 只要调?用这个?方法的控件内部存在第?一响应者,就能退出键盘

2.UIView的常?见属性

?  @property(nonatomic,readonly) UIView *superview;

?  获得?自?己的?父控件对象

?  @property(nonatomic,readonly,copy) NSArray *subviews;

?  获得?己的所有?子控件对象

?  @property(nonatomic) NSInteger tag;

?  控件的ID\标识,?父控件可以通过tag来找到对应的?子控件

?  @property(nonatomic) CGAffineTransform transform;

?  控件的形变属性(可以设置旋转?角度、?比例缩放、平移等属性)

[email protected](nonatomic) CGRect frame;

?控件所在矩形框在?父控件中的位置和尺?寸(以?父控件的左上?角为坐标原点)

[email protected](nonatomic) CGRect bounds;

? 控件所在矩形框的位置和尺?寸(以?自?己左上?角为坐标原点,所以bounds的x\y?一般为0)

[email protected](nonatomic) CGPoint center;

?控件中点的位置(以?父控件的左上?角为坐标原点)

3.UIView的常?见?方法

?  - (void)addSubview:(UIView *)view;

?  添加?一个?子控件view

?  - (void)removeFromSuperview;

?  从?父控件中移除

?  - (UIView *)viewWithTag:(NSInteger)tag;

?  根据?一个tag标识找出对应的控件(?一般都是?子控件)

4.实现简单动画

• 在iOS开发中,想实现?一些?小动画是?非常容易的

? 系统会根据某个属性值的改变?自动形成动画

? ?比如x值本来是10,然后x值突然改为了100,系统会通过平移动画的?方式让x值慢慢从 10变到100

• 简易动画?大致有2种?方式:

? 头尾式[UIView beginAnimations:nil context:nil]; /** 需要执?行动画的代码 **/
[UIView commitAnimations];

? Block式[UIView animateWithDuration:0.5 animations:^{/** 需要执?行动画的代码 **/ }];

5.修改控件的位置和尺?寸

• 通过以下属性可以修改控件的位置

? frame.origin
? center

• 通过以下属性可以修改控件的尺?寸

? frame.size
? bounds.size

7.transform属性

利?用transform属性可以修改控件的位移(位置)、缩放、旋转

创建?一个transform属性

? CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) ;

? CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

? CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

? (angle是弧度制,并不是?角度制 M_PI_4为90度)

在某个transform的基础上进行叠加

? CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloatty);

? CGAffineTransform CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);

? CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle);

• 清空之前设置的transform属性

? view.transform = CGAffineTransformIdentity;

6.UIButton和UIImageView

• 相同点:都能显?示图?片

• 不同点? UIButton默认情况就能监听点击事件,?而UIImageView默认情况下不能

? UIButton可以在不同状态下显?示不同的图?片? UIButton既能显?示?文字,又能显?示图?片

• 如何选择? UIButton:需要显?示图?片,点击图?片后需要做?一些特定的操作

? UIImageView:仅仅需要显?示图?片,点击图?片后不需要做任何事情

7.NSArray和NSDictionary的使?用

• 当图?内容非常多时,“根据index来设置内容”的代码就不具备扩展性,要经常改动

• 为了改变现状,可以考虑讲图?片数据线保存到?一个数组中,数组中有序地放着很多字典,

一个字典代表?张图片数据,包含了图片名、图片描述

@property (strong, nonatomic) NSArray *images;
• 由于只需要初始化?一次图?片数据,因此放在get?方法中初始化
• 将属性放在get?方法中初始化的?方式,称为“懒加载”\”延迟加载”

8.什么是Plist文件

• 直接将数据直接写在代码?里?面,不是?一种合理的做法。如果数据经常改,就 要经常翻开对应的代码进?行修改,造成代码扩展性低

• 因此,可以考虑将经常变的数据放在?文件中进?行存储,程序启动后从?文件中 读取最新的数据。如果要变动数据,直接修改数据?文件即可,不?用修改代码

• ?一般可以使?用属性列表?文件存储NSArray或者NSDictionary之类的数据,这种 属性列表?文件的扩展名是plist,因此也成为“Plist?文件”

9.解析Plist?文件

• 接下来通过代码来解析Plist?文件中的数据

? 获得Plist?文件的全路径NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];

? 加载plist?文件_images = [NSArray arrayWithContentsOfFile:path];

- (NSArray *)images

{

if (_images == nil) {

NSBundle *bundle = [NSBundle mainBundle];

NSString *path = [bundle pathForResource:@"imageData" ofType:@"plist"];

_images = [NSArray arrayWithContentsOfFile:path];

}

return _images;

}

10.UIImageView帧动画相关属性和?方法

• @property(nonatomic,copy) NSArray *animationImages;
? 需要播放的序列帧图?片数组(?里?面都是UIImage对象,会按顺序显?示?里?面的图?片)

• @property(nonatomic) NSTimeInterval animationDuration; ? 帧动画的持续时间

• @property(nonatomic) NSInteger animationRepeatCount; ? 帧动画的执?行次数(默认是?无限循环)

• - (void)startAnimating; ? 开始执?行帧动画

• - (void)stopAnimating; ? 停?止执?行帧动画

• - (BOOL)isAnimating; ? 是否正在执?行帧动画

11.UIImage的2种加载?方式

• ?方式?一:有缓存(图?片所占?用的内存会?一直停留在程序中)

? + (UIImage *)imageNamed:(NSString *)name;

? name是图?片的?文件名

• ?方式?二:?无缓存(图?片所占?用的内存会在?一些特定操作后被清除)

?  + (UIImage *)imageWithContentsOfFile:(NSString *)path

?  - (id)initWithContentsOfFile:(NSString *)path; ? path是图?片的全路径

12.?用模型取代字典的好处

• 使?用字典的坏处? ?一般情况下,设置数据和取出数据都使?用“字符串类型的key”,编写这些key时,编译器不会有任何友善提?示,需要?手敲

? dict[@"name"] = @"Jack";

? NSString *name = dict[@"name"];

?手敲字符串key,key容易写错 Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据

13.使?用模型的好处

所谓模型,其实就是数据模型,专门?用来存放数据的对象,?用它来表?示数据会更加专业模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性

使?用模型访问属性时,编译器会提供?一系列的提?示,提?高编码效率

app.name = @"Jack”;

NSString *name = app.name;

14.字典转模型

• 字典转模型的过程最好封装在模型内部

• 模型应该提供?一个可以传?入字典参数的构造?方法
? -(instancetype)initWithDict:(NSDictionary*)dict;

? +(instancetype)xxxWithDict:(NSDictionary*)dict;

instancetype

• instancetype在类型表?示上,跟id?一样,可以表?示任何对象类型

• instancetype只能?用在返回值类型上,不能像id?一样?用在参数类型上

• instancetype?比id多?一个好处:编译器会检测instancetype的真实类型

15.Xib?文件的使?用

• Xib?文件可以?用来描述某?一块局部的UI界?面

• Xib?文件的加载 ? ?方法1

NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil

options:nil];

这个?方法会创建xib中的所有对象,并且将对象按顺序放到objs数组中 (如果xib如右图所?示,那么objs数组中依次会有3个对象:1个UIView、1个UIButton、1个UISwitch)

? ?方法2 bundle参数可以为nil,默认就是main bundle

UINib *nib = [UINib nibWithNibName:@"MJAppView" bundle:[NSBundle mainBundle]];

NSArray *objs = [nib instantiateWithOwner:nil options:nil];

• 在开发阶段,?面向开发者的是xib?文件; 当把应?用装到?手机上时,xib?文件就会转为nib?文件

16.Xib和storyboard对?比

• 共同点:? 都?用来描述软件界?面? 都?用Interface Builder?工具来编辑

• 不同点

? Xib是轻量级的,?用来描述局部的UI界?面

? Storyboard是重量级的,?用来描述整个软件的多个界?面,并且能展?示多个界?面之间的跳 转关系

17.UILabel的常?见设置

• @property(nonatomic,copy) NSString  *text;

? 显?示的?文字

• @property(nonatomic,retain)UIFont *font;

? 字体

• @property(nonatomic,retain) UIColor  *textColor;

? ?文字颜?色

• @property(nonatomic) NSTextAlignment textAlignment;

? 对?齐模式(?比如左对?齐、居中对?齐、右对?齐)

18.UIFont

• UIFont代表字体,常见创建?方法有以下?几个:? + (UIFont *)systemFontOfSize:(CGFloat)fontSize;

系统默认字体

? + (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize; 粗体
? + (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize; 斜体

19.UIButton的常?见设置

• - (void)setTitle:(NSString *)title forState:(UIControlState)state; ? 设置按钮的?文字

• - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state; ? 设置按钮的?文字颜?色

• -(void)setImage:(UIImage*)imageforState:(UIControlState)state; ? 设置按钮内部的?小图?片

• - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; ? 设置按钮的背景图?片

• 设置按钮的?文字字体(需要拿到按钮内部的label来设置)
? btn.titleLabel.font=[UIFontsystemFontOfSize:13];

• -(NSString*)titleForState:(UIControlState)state;

? 获得按钮的?文字

• - (UIColor *)titleColorForState:(UIControlState)state;

? 获得按钮的?文字颜?色

• - (UIImage *)imageForState:(UIControlState)state;

? 获得按钮内部的?小图?片

• - (UIImage *)backgroundImageForState:(UIControlState)state;

? 获得按钮的背景图?片

20.状态栏

• 在iOS7中,状态栏默认情况下归控制器管理,?比如状态栏的样式、状态栏的是否可见

• 控制器通过重写以下?方法来控制状态栏
? 设置状态栏的样式
- (UIStatusBarStyle)preferredStatusBarStyle;
其中UIStatusBarStyleLightContent是?白?色样式

? 设置状态栏的可见性
- (BOOL)prefersStatusBarHidden;

21.UIButton

• UIButton有很多种状态,它提供了?一些便捷属性,可以直接获取当前状态下的?文字、?文 字颜?色、图?片等

• @property(nonatomic,readonly,retain)NSString*currentTitle;
• @property(nonatomic,readonly,retain) UIColor *currentTitleColor;

• @property(nonatomic,readonly,retain) UIImage *currentImage;
• @property(nonatomic,readonly,retain) UIImage *currentBackgroundImage;

时间: 2024-08-23 23:52:20

IOS基本控件知识点总结(一)的相关文章

iOS常用控件尺寸大集合

元素控件 尺寸(pts) Window(含状态栏) 320 x 480 Status Bar的高度 20 Navigation Bar的高度 44 含Prompt的Navigation Bar的高度 74 Navigation Bar的图标 20×20(透明的png) Tool Bar的高度 44 Tool Bar的图标 20×20(透明的png) Tab Bar的高度 49 Tab Bar的图标 30×30(透明的png) 竖直时键盘的高度 216.252(iOS 5+的中文键盘) 水平时键盘

iOS第三方控件

一.SIAlertView https://github.com/Sumi-Interactive/SIAlertView 感言: 扁平化设计的对话框(UIAlertView),对话框的弹出与消失的动画很不错,可以自定义对话框的外观 iOS第三方控件

iOS UITextField控件总结

iOS UITextField控件总结 先声明下面总结不是自己写的. //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

IOS Ui控件 修改位置和尺寸,代码添加控件

所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中, UIView的常见属性 UIView *superview; 获得自己的父控件对象 NSArray *subviews; 获得自己的所有子控件对象 NSInteger tag; 控件的ID(标识),父控件可以通过tag来找到对应的子控件 CGAffineTransform transform; 控件的形变属性(可以设置旋转角度.比例缩放.平移等属性) CGRect frame; 控件所在矩形框在父控件中的位置和尺

IOS—UITextFiled控件详解

IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderS

[iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表&quot;练习)

A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不可以再按 2.在屏幕中间弹出一个消息框,通知消息“xx已经被安装”,慢慢消失 3.消息框样式为圆角半透明 B.不使用代理模式,使用app空间组和主View之间的父子View关系 1.在主View中创建一个消息框 主View控制器:ViewController.m 1 // 创建下载成功消息框 2 CGFloat labelWid

JS调用Android、Ios原生控件

在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时,提高代码质量,实现两者在网页端代码的统一. 首先我们先看一下Ios调用JS的方法实现: //无参调用 function SwiftCallJs1(){} //有参调用 function SwiftCallJs2(name, message){} 紧接着我们看一下Android调用JS的方法实现: /

android 仿ios开关控件

ios一些控件还是挺漂亮的,但是对android程序员来说可能比较苦逼,因为ios一些看起来简单的效果对android来说可能就没那么简单了,但是没办法很多产品都是拿ios的一些控件叫android开发人员来照着做,今天就来做一个设置中常见的开关效果, 思路: 1:准备二张图片 一个是包含开和关二种状态的图片,一个是上面滑动的按钮图片 2:这些图片肯定是不能通过原生态的控件显示上去的,要通过canvas画上去 3:要解决点击和滑动的事件冲突,因为点击包含 按下 离开,而滑动包含按下  移动 离开