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
原创粉丝点击