IOS基础一
#1. 开发概览
SDK(Software Develop Kit)
IBAction(相当于void) IBOutlet 用于联系
安装非8.0 sdk 将文件夹拖入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs下
添加离线文档文档. 将解压后的文件拖入/Applications/Xcode.app/Contents/Developer/Documentation/DocSets中,(在完全退出Xcode下)
查看User EXperience
##1.1. 初识UI
- UI是app的基础, 然后在UI的基础上增加实用功能, 开发中绝大多数时间在处理UI
万物皆对象, UI界面由对象组成, 将对象显示到屏幕上- 主要在UIKit框架提供了很多可视化组件元素
##1.2. 常用框架
- UIKit(创建和管理应用程序的用户界面)
- QuartzCore(提供动画特效以及通过硬件进行渲染的能力)
- CoreGraphics(提供2D绘制的基于C的API)
- CoreLocation(使用GPS和WIFI获取位置信息)
- MapKit(为应用程序提供内嵌地图的接口)
- AVFoundation(音频处理)
##1.3. UIView
- 屏幕上看得见摸得到的东西就是UIView, 一般翻译为
视图/控件/组件 - 按钮,文字,图片的UI都是继承自UIView
- UIView是一个容器, 容纳其他UIView
- 理解父控件/子空间
每一个UI控件都有自己的独特属性,但是有些属性是每个UI控件都具备的,比如每一个UI控件都有自己的位置和尺寸、都有自己的父控件、子控件。于是,所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中
- UIView的常见属性
|
|
##1.4. UIViewControler
- 界面的切换涉及到UIView的创建和销毁
- 涉及UIView跟用户交互
- 显示一个新界面之前, 先创建了一个
UIViewControler对象,然后创建一个UIView界面, UIViewControler管理UIView, 负责UIView创建, 销毁, 显示, 监听, 与用户的交互
@property(nonatomic,retain) UIView *view;
##1.5. 运行流程
- 读取Main.storyboard文件
- 创建箭头所指的MJViewController对象
- 根据storyboard文件中描述创建ViewController的UIView对象
- 将UIView对象显示到用户眼前
#2. 按钮的基本使用
- 按钮可以显示文字, 可以显示图片,可以随时调整内部图片和文字
- UIButton的状态
- normal : 普通状态
- highlighted : 长按按钮的状态(type修改为custom)
- disabled
- autolayout(自动布局): 修改button要取消自动布局
|
|
|
|
##2.1. 自动生成按钮
凡是storyboard有的功能都能用代码解决
|
|
##2.2. Xcode的快捷键
- Option + cmd + 回车 打开辅助视图(分栏)
- cmd + 0 打开或者取消左边的导航栏
- option + cmd 0 打开或者取消右边的属性视图
- cmd + r 运行
- cmd + . 停止运行
- Shift + cmd + h 模拟测试回到首页(相当于home)
- 两次Shift + cmd + h 打开模拟测试的任务管理器
##2.3. 退出键盘
|
|
##2.4. 从资源文件中获取数据
|
|
##2.5. 序列帧动画
|
|
##2.6. 文档注释
/** 这个一个文档注释 */
##2.7. UIImageView和UIButton
- 如果仅仅是显示图片不需要监听, 则使用BUImageView
- 既要显示图片又要监听图片点击, 用UIButton
相同点
: 都能显示图片
不同点
: 1. UIButton能处理点击事件, UIImageView不能处理点击事件; UIButton能显示图片又能显示文; UIButton能同时显示两张图
UIButton继承自UIControl, 因此默认就能处理事件
UIImageView继承自UIView, 因此默认就不能处理事件
#3. 数据类型
字典
: 设置数据和取出数据使用字符串类型的key, 编写这些key时, 编译器不会有警告, 容易敲错
模型
: 数据模型,专门用来存放数据的对象, 设置数据和取出数据都是通过它的属性, 编译器会报错, 保证了数据的正确性,推荐使用
copy : NSString
strong : 一般对象
weak : UI控件
assign : 基本数据类型

##3.1. instancetype
- 在类型表示上, 和
id一样, 可以表示任何对象类型 - 只能用在返回值类型上
- 比
id多一个好处 : 编译器会检测instancetype的真实类型
##3.2. Xib使用
storyboard文件软件界面, 整个软件所有界面(重量级)Xib描述软件界面(轻量级)- 两者都使用Interface Builder工具来编辑(就是Xcode的界面)
- 加载Xib有两种:
NSArray *objs = [bundle loadNibNamed:@”AppView” owner:nil options:nil];
|
|
##3.3. Xib的封装步骤
如果View内部的子控件太多, 一般考虑自定义View, 把内部子控件的创建屏蔽起来
- 新建一个继承UIView的自定义View, 假设类名为AppView
- 新建一个AppView.Xib(建议Xid的名称和新建类相同),用来描述AppView的内部结构(AppView *appView = [[AppView alloc] init]; appView.frame = CGRectMake(x, x, x, x); …; [appView addSubview:imageView]; return @[appView, ..); 最终返回控件数组)
- 修改UIView的类型为AppView真实类型
- 将内部子空间与AppView进行属性连线
- AppView提供一个模型属性, 重写模型的set方法, 因为在set方法中可以拿到外界传递的模型数据
- 把模型数据拆开, 分别设置数据到对应的子控件中.
- 补充: 提供一个创建AppView的雷芳, 将读取Xib的代码屏蔽起来
##3.4. MVC
Model(数据模型) View(视图) Control(控制器)
#4. UIScrollView
内容超出屏幕的显示范围, 需要使用
UIScrollView
- 将需要演示的内容加入
UIScrollView - 设置UIScrollView的contentSize属性, 告诉UIScrollView所有内容尺寸
|
|
##4.1. UIScrollView重要属性
|
|

##4.2. UIScrollView的代理(delegate)
代理相当于监听器
按钮点击时间使用addTarget
- 很多时候,我们想在UIScrollView正在滚动 或 滚动到某个位置 或者 停止滚动 时做一些特定的操作
- 要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程
- 当UIScrollView发生一系列的滚动操作时, 会
自动通知它的代理(delegate)对象,给它的代理发送相应的消息,让代理得知它的滚动情况


代理设计的用途 :
- 监听思想(一个对象听见另一个对象的状态)
- 通知思想(一个对象状态改变, 想通知另一个对象)
当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScrollView:方法,这个方法返回的控件就是需要进行缩放的控件