iOS笔记_01_UIView初见
来源:互联网 发布:windows rmdir命令 编辑:程序博客网 时间:2024/06/06 08:43
引言
现在距毕业离校大概还有两个多月,最后这几十天,给自己找点事干,开始在博客上整理一下我学习iOS的笔记。包括查官方文档,看某宝淘来的课,看各种各样的书跟技术大牛们的博客等各类途径总结而成。望各位看主多多指导,在下先谢过了。:-)
1、storyboard文件的认识
- 用来描述软件界面
- 默认情况下,程序一启动就会加载Main.storyboard
- 加载storyboard时,会首先创建和显示箭头所指的控制器界面
2、IBAction和IBOutlet
- IBAction:
- 本质就是void
- 能让方法具备连线的功能
- IBOutlet
- 能让属性具备连线的功能
3、storyboard连线容易出现的问题
- 连接的方法代码被删掉,但是连线没有去掉
- 可能会出现方法找不到错误
- unrecognized selector sent to instance
- 连接的属性代码被删掉,但是连线没有去掉
- setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key
4、UIViewController(控制器)的认识
- 一个控制器负责管理一个大界面
- 控制器负责界面的创建、事件处理等
5、类扩展
- 格式
@interface 类名()/** 属性、方法的声明 */@end
- 作用
- 为某个类增加额外的属性和方法声明
- 可以写在.h和.m文件中
6、项目属性
- Product Name
- 软件名称、产品名称、项目名称
- Organization Name
- 公司名称、组织名称
- Organization Identifier
- 公司的唯一标识
- 一般是公司域名的反写,比如com.520it
- Bundle Identifier
- 软件的唯一标识
- 一般是Organization Identifier + Product Name
7、UIView的常见属性跟方法
@property(nonatomic,readonly) UIView *superview; // 获得自己的父控件对象@property(nonatomic,readonly,copy) NSArray *subviews; // 获得自己的所有子控件对象@property(nonatomic) NSInteger tag; // 控件的ID(标识),父控件可以通过tag来找到对应的子控件@property(nonatomic) CGAffineTransform transform; // 控件的形变属性(可以设置旋转角度、比例缩放、平移等属性)- (void)addSubview:(UIView *)view; // 添加一个子控件view- (void)removeFromSuperview; // 从父控件中移除- (UIView *)viewWithTag:(NSInteger)tag; // 根据一个tag标识找出对应的控件(一般都是子控件)@property(nonatomic) CGRect frame; // 控件矩形框在父控件中的位置和尺寸(以父控件的左上角为坐标原点)@property(nonatomic) CGRect bounds; // 控件矩形框的位置和尺寸(以自己左上角为坐标原点,所以bounds的x、y一般为0)@property(nonatomic) CGPoint center; // 控件中点的位置(以父控件的左上角为坐标原点)
8、UIButton的常见属性跟方法
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; UIButtonTypeCustom://无类型,按钮的内容需要自定义UIButtonTypeDetailDisclosure: UIButtonTypeInfoLight: UIButtonTypeInfoDark: UIButtonTypeContactAdd:
- (void)setTitle:(NSString *)title forState:(UIControlState)state; // 设置按钮的文字- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state; // 设置按钮的文字颜色- (void)setImage:(UIImage *)image forState:(UIControlState)state; // 设置按钮内部的小图片- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state; // 设置按钮的背景图片btn.titleLabel.font = [UIFont systemFontOfSize:13]; // 设置按钮的文字字体(需要拿到按钮内部的label来设置)- (NSString *)titleForState:(UIControlState)state; // 获得按钮的文字- (UIColor *)titleColorForState:(UIControlState)state; // 获得按钮的文字颜色- (UIImage *)imageForState:(UIControlState)state; // 获得按钮内部的小图片- (UIImage *)backgroundImageForState:(UIControlState)state; // 获得按钮的背景图片
9、九宫格计算思路
- 利用控件的索引index计算出控件所在的行号和列号
- 利用列号计算控件的x值
- 利用行号计算控件的y值
10、HUD
- 其他说法:指示器、遮盖、蒙板
- 半透明HUD的做法
- 背景色设置为半透明颜色
11、定时任务
- 方法1:performSelector
// 1.5s后自动调用self的hideHUD方法[self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];
- 方法2:GCD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 1.5s后自动执行这个block里面的代码 self.hud.alpha = 0.0;});
- 方法3:NSTimer
// 1.5s后自动调用self的hideHUD方法[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];// repeats如果为YES,意味着每隔1.5s都会调用一次self的hidHUD方法
12、常见问题
- 项目里面的某个.m文件无法使用
- 检查:Build Phases -> Compile Sources
- 项目里面的某个资源文件(比如plist、音频等)无法使用
- 检查:Build Phases -> Copy Bundle Resources
13、模型与plist文件
- 什么是模型?
- 专门用来存放数据的对象
- 一般都是一些直接继承自NSObject的纯对象
- 内部会提供一些属性来存放数据
- plist文件
// 获得Plist文件的全路径NSBundle *bundle = [NSBundle mainBundle];NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];// 加载plist文件_shops = [NSArray arrayWithContentsOfFile:path];
- 注意:plist的文件名不能叫做“info”、“Info”之类的
- 字典转模型
- 字典转模型的过程最好封装在模型内部
- 模型应该提供一个可以传入字典参数的构造方法
- (instancetype)initWithDict:(NSDictionary *)dict;+ (instancetype)xxxWithDict:(NSDictionary *)dict;
14、instancetype与id
- instancetype在类型表示上,跟id一样,可以表示任何对象类型
- instancetype只能用在返回值类型上,不能像id一样用在参数类型上
- instancetype比id多一个好处:编译器会检测instancetype的真实类型
15、一个控件看不见有哪些可能?
- 宽度或者高度其实为0
- 位置不对(比如是个负数或者超大的数,已经超出屏幕)
- hidden == YES
- alpha <= 0.01
- 没有设置背景色、没有设置内容
- 可能是文字颜色和背景色一样
16、view的封装
- 封装的基本步骤:
- 在initWithFrame:方法中添加子控件,提供便利构造方法
- 在layoutSubviews方法中设置子控件的frame(一定要调用super的layoutSubviews)
- 增加模型属性,在模型属性set方法中设置数据到子控件上
17、xib
- 加载
- 方法:
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil]
UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];NSArray *views = [nib instantiateWithOwner:nil options:nil];
- 注意点:
- 通过代码创建
- 初始化时一定会调用initWithFrame:方法
- 通过xib\storyboard创建
- 初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法
- 初始化完毕后会调用awakeFromNib方法
- 通过代码创建
18、UILabel的常见属性及方法
@property(nonatomic,copy) NSString *text; // 显示的文字@property(nonatomic,retain) UIFont *font; // 字体@property(nonatomic,retain) UIColor *textColor; // 文字颜色@property(nonatomic)NSTextAlignment textAlignment; // 对齐模式(比如左对齐、居中对齐、右对齐)
// UIFont代表字体,常见创建方法有以下几个:+ (UIFont *)systemFontOfSize:(CGFloat)fontSize; // 系统默认字体+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize; // 粗体+ (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize; // 斜体
小结:之前学的时候,发现iOS开发跟其他开发都差不多,刚开始都要记住一些琐碎的东西,用熟练以后就能拼凑到一块了。都说万事开头难,但我就觉得iOS开发开头挺容易的,但坚持学下来挺难的。
0 0
- iOS笔记_01_UIView初见
- 【iOS学习笔记】关于iOS中的属性修饰符初见
- IOS之初见runLoop
- Java 学习笔记-初见
- Swift2.0初见笔记
- 【note】Swift初见笔记
- IOS SWIFT---初见iOS程序
- IOS SWIFT---初见iOS程序
- Android学习笔记--初见AsyncQueryHandler
- 初见
- 初见
- 初见
- 初见
- 初见
- iOS开发-- iOS UIAppearance初见
- IOS开发-Swift新语言初见
- ios swift学习日记1-Swift 初见
- IOS开发语言Swift入门连载---初见
- 1209:Catch That Cow(bfs)
- mfc获取实时网速的头文件及cpp
- Cocos2dx项目--动作类游戏内存优化--Spine结构分析1
- 40.leetcode题目:
- CreateUDPServer
- iOS笔记_01_UIView初见
- FTP站点+FTP相关问题集
- [IMX6Q][Android5.1]移植笔记 --- LCD显示移植(LVDS接口)
- EGLImage in SurfaceFlinger
- 用xutils3.0来访问 spring boot,带权限验证
- String.format() 字符串的格式化
- Android报error -1073741819 libcocos2dxinternal.a
- 使用ChannelFactory类实现动态调用WCF地址
- 复杂系统的规范形式