计划真是赶不上变化,周四五由于个人工作及个人事务的原因(当然还有懒的因素,-_-||),只将staford lecture 2,3看完,并且挤时间看了“beginning”的“development process”“designing a user interface”“defining the interaction”几章,没能完成一天一课包括代码、作业、博客,今天把之前的复习下并敲了2,3章的代码,此篇为2章总结,明天写第三章。
此章实现了一个简单的游戏:点击牌桌上的一张牌,就将牌翻转,显示其正面或者背面,并且在屏幕底部显示点击的次数。通篇下来,遵循mvc的设计思想,model层设计了牌桌与牌的功能,view层添加了UI资源并且设置其属性,controller层通过action和outlet将view的界面元素与controller的处理连接起来。以下是其中设计到的一些内容。
model
1. 方法中的参数定义
- (void)addCard:(Card *)card atTop:(BOOL)atTop; 初次接触这种写法还觉得蛮奇怪的,因为与c++ java中的都不同,添加了“额外的”atTop,似乎在方法的语义理解上有所帮助
2. alloc init: 不同于malloc,new等调用后直接就可使用不同,alloc后要init(或者其它的init实现)
3. 子类的定义: PlayingCard:Card
4. 类型:NSMutaleArray,NSUinteger,及格式化字符串stringWithFormat [NSString stringWithFormat:@“%d%@“, 1, @“a”]
5. instancetype: 返回类型表明此对象在接受消息后返回一个与自己类型相同的对象,一般只用在init方法中
view
1. 几种inspector:file,attribute,size等
2. 工程中插入image资源:放置在images.xcassets中(drag),而对不同屏幕设备要用不同分辨率资源,其中1x version是非Retina屏的,2x version是Retina屏的
3. 在attribute inspector中设置button的背景图片
controller
1. 所有controller都是从UIViewController继承的
2. 为UI元素添加action:control drag按钮到controller的实现文件方法定义中,并设置名称,类型,事件类型等
3. UIImage类型:用一个UIImage类型来表示在之前添加到工程中的图片资源,并且显示它:[UIImage imageNamed:@“name”]
4. 为UI元素添加outlet:与action相同,control drag之到实现文件的属性定义中,并设置名称,类型等
按照此课程的步骤走下来,实现了期望的效果,猜测iOS开发应该最主要的模式就是mvc了,从逻辑层到界面表现层分层清晰,model层包含数据结构的表示,有数据库、文件及各种数据结构的表现形式,controller层要添加各个UI元素的action outlet等以捕获对它们的操作,从而修改model层并反馈回view层,而view层则要添加各种UI元素,设置布局,甚至自己定制UI元素及其动画等,这个猜测在以后的学习中加以印证。