备注: 所有笔记均与老师ppt相对应。
第一篇: 关于 view controller
ppt1:
model:持久化保持状态的部分
view: 直接和用户打交道
controller: 传递与储存数据 承上启下
view用delegate传信息给controller(data owner, file source)
MVC具体会在设计结构的课程里讲述
之间起到 单项作用 若耦合
ppt2: 各种框架的选择
cocoa本来是用来给小孩子的玩玩
MVC的弊端: GUI中程序琐碎 10个object-> 10 presentation
-> MVP ( model - view - presenter) UILogic 中加入自动化UIStates 取出一部分和界面相关的data binding
-> M-V-VM (model - view - view model) 双向的data binding
问题: 数据间的关系 难以表达 尤其在三维动画中体现完全
->FRP(functional reactive programming) 用数据流, 中间搭建好关系(map),就可以自动的反应了 (微软)
MVC是一切的基础
ppt3:
UIViewController 实质 就是一个 API(Application Programming Interface应用程序编程接口)
viewcontroller 可以 管理view + 传递数据(多个界面的controller之间也需要传递)+适应设备(旋转补偿etc)+。。。。
viewcontroller的结构是一个树
ppt4: 创建rootViewController 的过程
info.plist
本身会自动帮忙load界面 loadMainStoryboard…
若这个函数被删去 则可以通过uiapplicationdelegatedidFinishLaunch来 也就是调用手写的代码
若我们手工不写的话 则会黑屏, 因为没有uiwindow了
window是UIwindow的一个实例
前面是 view 后面的 就是window
UIMainStoyuboardFile NSMainNibFile 分别有两个主界面
之前就是用代码完全创建view controller
window
UIWindow(一切可视化界面的起点) - UIview
[实验尝试]得
若mainstoryboard后面的value没了或直接删去整个storyboard 界面也会由蓝色变为黑色
若mainstoryboard后面的value放了错误的东西 界面也会由蓝色变为白色 然后会出现如图所示的错误
把mainstoryboard删掉 手动创建它 但是不给他viewcontroller
这个代码会在练习说明里面提供
viewcontroller怎么拿到他的东西呢?
nibname的可能性
默认的话 viewcontroller 从 storyboard 来, 那么nib已经嵌入其中
若自己用程序写 则按照
若什么都没有 就会调用existingNibNameMatchingClassname
练习:
把对话框中的 1,2,3,4,5,6 都去试验一下
用断点或者NSLog来理解viewcontroller的 lifecycle
展示的每个viewcontroller都需要上手练一遍
注意: 以uicontroller大头的不会自动寻找nib
viewdisappear可以放部分的信息 但不要放太多
把UIviewcontroller的文档要看一遍
ppt5:
viewcontroller会尽量推迟view的加载
通常当自己变成主窗口的时候才会开始阅读
自己写的代码 就会 调用 loadcontroller
自定义的loadview 是不会调用supercontroller的
如果有UI view controller 大头的 注意系统根本不会去加载后面的内容咯
ppt6:
life circle
will-did
viewWillDisappear: 清理工作
ppt6: view presentation每个人都要去写一遍
用-presentviewcontroller:
用来传递数据
uimodelpresentationFormSheet: 邮件
uimodelpresentationcurrentcontext: 分屏工作
建议还是用来看文档比较好
showviewcontroller: ios8 之后就有了 建议也去模拟一下子
如何回传数据: 后一步-》前一步:
前一步 delegate -》 后一步
后一步传消息 -> delegate -> 前一步dismiss
第二篇: 关于storyboard
打开viewcontroller的sourcecode 我们会发现它也是一个xib也就是nib文件 但是它和普通的view controller又不一样 它放的是一个场景(scene)
注意缩小的情况下无法编辑这个场景, 需要双击进入才能够编辑
一个storyboard是一个故事
如果没有把第一个view删去的话,nib会默认为先调用这最初的view 而不是viewcontroller的名字
storyboard上3个按钮的含义 从左到右依次为:
view的名字 + 上面第一个响应的事件 + 。。。
除了用按钮去触发之外 还可以选择用直接在导航栏拖动
要把UIstoryboard 的 reference也看一看
第三篇: 关于life cycle
ppt5:
在做appdelegate 中 图示的程序是非常值得学习的
NSStringFromClass([AppDelegate class])
与直接放上 AppDelegate 其实是等价的,
可是图中的方法更好,因为它可以保证你后续的appname改变的话,在这里也会自动跟着改变的。
ppt6:
关于port mac, event queue, main run loop (不断的循环,来侦探有的触摸等 用户行为) 都是mac系统已经帮我们准备好的 我们要做的就是 通过viewcontroller来规定遇到了这些行为我们要去做些啥子
解释一个概念 runloop mode: 就是指 一组数据源
runloop就是为了侦探信息来发给我们的主线程用的。
ppt7:
注意在 willFinishLaunchingWithOptions (尽量在这里去做初始化)里面要放应用级的初始化工作,但是不要做很多太耗时的工作
如果需要做的话,用dispactch cue 开一个ebool的线程来完成会更好一些
/*
当UI界面的临时状态还没有恢复,并且我们希望做一些应用级的初始化工作时,可以放到以下哪个方法中:
•
A. -(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
• B.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsC.- (void)applicationWillEnterForeground:(UIApplication
D.- (void)applicationWillTerminate:(UIApplication *)application
应该选择A
*/
界面的状态已经恢复过了,但是UI 还没有放到屏幕上,进入了inactive状态。
inactive也就是说代码在执行,但是界面上看不见,用户的动作不会被响应
-> didFinishLaunchingWithOptions 这里可以去看看 有哪些options(分别对应了各种稀奇古怪的打开方式)
app programming guide for iOS
preserving your app’s visual appearance across launches 有详细的解释
要想真的很好的完成ios开发 还需要去阅读很多。
-》 applicationdidbecomeActive
这样用户就进来啦!!
此刻若打进来电话,或着按了home按钮
-> applicationWilllResignActive
我们去做一些保护线程
-> applicationDidEnterBackground
这个只会有5s(系统说),实际大概为100s。如果需要更长的可以申请更长的 (startgroundTimeRemaining 大概10min)
ps: 后台运行程序和这里的不一样,比如高德地图,音乐软件啥子的,这个自己去看吧(见app programming guide for ios)。
因为内存不够啥子的,而且还没有被suspend(比如5s后就随时有可能被suspend)
-> applicationWillTerminate
所以千万不要在这里做一些关键的动作。
若回复活
applicationWillEnterForeground
会在调用app delegate后发出同名的ui notification 这样系统中除了app delegate的部分也可以去访问这个事件。
ppt8:
移动应用的特点: 启动 - 使用 -中断 -恢复
用户正在你的程序 滚动下来 找图片,然后一个电话打进来。 UI状态的保持
用调试的一个常见方法: NSLog(@“will finish launching”);
21’ 开始讲解 在边栏上可以设置断点
断点中如果需要跟踪某个变量可以利用 filter, add, 或者
右下角窗口的go self.window.rootViewController
+ add symbolic breakpoint
swift breakpoint
except breakpoint (特殊异常错误)
test failure breakpoint(只在没法运行的时候的时候)
debugger command
log message也是可以的
汇编语言中需要注意的其实只是 callq 意思是调用了q这个函数
idapro 对于汇编语言弄的熟悉的人 可以用。
接个设备去调试会好很多哟~
练习:
xcode的每个调试功能 选择: 用符号断点,来看一下uikey的内部具体内容
nslog
观看: iOS调试实战
http://e.gensee.com/v_72a754_6
第六篇: 关于navigation bar
1, 要有统一的设计风格,要让顾客在固定的地方做固定的事情
2. navigation bar(又叫面包屑)最常用的界面跳转控制, 最经典的可以在我们的setting里面找到。
3. 这个只会有上一步 - 下一步,
而不像网页那样所有的网站都会有
因为有uinavigation controller
navigationitem 形式: 左(上一个)+中(title)+右(下一个)
第二课:
-ppt5: navigationbar 结构
1. 需要理解的是navigationbar 管理的是 navigationitem
2. push/pop的都是item
ppt6:
所有能显示的item都是继承自uibaritem
enabled 若为false 就是灰掉不能点的那种
title<>image 文字题目<>图片题目
tag: 所有的界面都有的这种tag 有多个的那种(尤其是同类型的)可能需要区分 于是特别需要tag
imageinsets: 定位的时候会用到的
uibaritem 首先是一个button(就是有action, target的特点)
-initwithbarButtonSystemItem: target: action -system
-initWithCustomView (大概的action就没了) -自定义的
Custom: 意思是自己添加
ppt7:
除了navigation bar 还有tool bar
ps: 实践
插入图片的话 可以不放在catalog里面而是放在preview里面,除了imagename的方法还有mainbundle里面找到图片的ui号码,以免把所有的东西都存在系统的图片缓存里面。
放在Project里的图片可以用imageByName的方法访问,也可以用mainBundle找到图片的URL来访问.
补充: 键盘遮挡问题