GeekBand-IOS实战-第一周

Hello IOS


这些官方的文档都是有必要去看的

  1. IOS总纲—可以以后回过头看
  • 界面基础

    • View controllerprogrammingguide
    • View controllercatalog
    • View programmingguide
    • UIKituserinterfacelcatalog
    • Event handlingguide
  • 图形和动画

    • Drawing and printing guide
    • Concurrency programmingguide
    • Quartz 2D programmingguide
    • Core animationprogrammingguide
  • 网络与存储

    • Network & Internet staring point — 知道方向
    • Network overview— 了解概念
    • Data managementstartingpoint— 知道方向
  • 等到真正要上手干活了,下面这些文档是必须要看的

    • Auto layout guide
    • Scroll view programmingguide
    • Table viewprogrammingguide
    • Collection viewprogrammingguide

要养成写 include 的习惯

APP基本概念

  1. IOS APP 的代码结构
  • main()

  • UIApplicationMain()

  • UIApplication对象

  • UIApplicationDelegate

  • IOS APP的运行环境

    • SandBox(沙盒)
  • 运行期目录结构

    • NSHomeDirectory()

Bundle

每个IOS应用都是一个Bundle
  • Bundle:带一个info.plist的目录
  • NSBundle类:通过这个类,可以读取info.plist里的信息,也可以访问Bundle里的资源
  • mainBundle:应用程序本身的一个Bundle,要读取应用里预先打包好的资源,就要从NSBundlemainBundundle里去访问它。
    • Resourcebundleframework都可以嵌在mainBundle里,framework是一个特殊的bundle,它里面的资源是一个动态库。
UIApplication

大部分时间,我们不直接跟UIApplication打交道而是使用 AppDelegate 打交道


Button

写程序时要将界面与代码分离
可以只用代码来描绘界面及响应用户操作
但是:不够直观,调整麻烦

  • IOS解决方案:
    • interfaceBuilder画出界面
    • 保存到xib(xml版的nib)文件
    • 用代码更新界面、响应用户操作
    • 保存在.m文件

InterfaceBuilder画出的界面代码保存在.m 文件内

tip:xibnibib就是InterfaceBuilder的缩写

但是这会有两个麻烦
  • 界面操作怎么指定响应代码?
  • 代码怎么引用界面元素?
解决方案
Outlet
  • 为了让代码能引用nib中创建的对象

    • 需要代码里有一个变量来引用界面对象
    • 在界面对象创建后,给这个变量赋值
    • 这个过程最好能自动完成
  • Outlet

    • IBOutlet标记的变量
  • Connection

Outlet

要做到这点,要给变量上加上一个修饰符<IBOutlet>,这个修饰本身没有实际意义(可以看成是一个另类的viod),只是一个标记。但是会告诉Xcode,这个变量是比较特别的。

Outlet 是一个变量,带有Outlet标记
Outlet Connection 是一个在Nib对象创建之后,通过Nib里的定义,在运行时把它和Outlet关联起来的一个机制
通常会说这个Outlet是这个Nibreferenceingoutlet


Action Connection
  • 界面事件

    • Interface BuilderConnectionInspector
  • 关联响应代码

    • IBAction标记的方法

** 关联:界面对象.事件=> 类实例.方法 **

Action Connection

他也是个Connection,但是他的类型是Action


Placeholder用来在文本框内做一些提示信息(切勿滥用)

Placeholder

Touch Up Inside: 在事件内部点击放开
Touch Up Outside:在事件内部点击,移动到外面放开(如微信的取消语音录制功能)


UIButton
  • 类型
  • Custom -可以设图标,可以设文字,可以该样式
  • System 默认风格 — 在Button里的Type可以更改样式
  • 状态
    • Normal (正常状态)
    • Highlighted (按下去的状态)
    • Selected
    • Disabled
  • 文字与图片
  • 背景

除了用拖动图标的方式创建Button,还可以纯代码来创建

当需要在Button的响应代码内用代码创建另一个Button时,不要忘记在创建之前写上 [super viewDidLoad];

  • 创建Button

    • UIButton*btn= [Uibutton buttonWithType:UIButtonTypeCustom]
      //构造Button实例的类方法
  • 设置属性

    • [btn setBackgroundImage:[UIImage imageNamed:@"okbtn"] forState:UIControlStateNormal];
      //设置BackgroundImage

    • [btn setTitle:@"OK" forState:UIControlStateNoemal];
      //设置Title

    • [btn setTitleColor:[UIColor redColor] forState: UIContorlStateNormal];
      //设置TitleColor

    ** 不要忘了那个forState **

  • 添加响应

    • [btn addTarget : self action: @selector(greeting:) forControlEvents: UIConteolEventTouchUpInside];
      //Tergetaction 模式

    • Event mask:UIControlEnentTouchUpInside|UIControlEvenTouchUpOutside
      //可以将UpInsideOutInside OR在一起,再把Eventmask传给forControlEvents:

    //btn里当这个对象出现时,去调用哪个对象(Target:self)的哪个方法(action)


Image

Assert Catalog 图片管理
  1. 片匡切割
  • 属性面板——>最底下——>sllclng
  • 具有处理矢量图的能力,矢量图在缩放上有很大优势
用UIImageView方式显示图片
  1. 代码里,UIImageView也是一个View。
  • 代码里的 .image 属性,给他赋值,他就有图片了
    • interfaceBuilde选择图片
    • 图片打包在mainBundle
    • 系统会自动缓存图片(即使ImageView消失,内存也不会释放)
用UIImage类在代码里加载图片
mainBundle里加载

Image = [UIImage imageNamed:@""];//会自动选用mainBundle里的图片

Image = [UIImage imageNamed:@"" inBundle:nil compatibleWithTraitCollection:nil];//如果用自己打包好的图片,就需要加上后面两个参数。

// 上面两种方法会自动缓存

Uiimage *image = [UIImage imageWithContentsOfFile:url.path];//用这个方法就不会被自动加载,但是要先获得图片的url,获取代码如下。
NSURL *url = [[NSBundle mainBundle] URLForResource:@"mypic" withExtension:@"png"];

从文件内加载

UIImage *image = [UIImage imageWIthContentsOfFile:path];//只要是能访问到的文件,都能加载进来。

UIImage *image = [UIImage imageWithData:data];//从网上读取的一组数据,已经放在NSData里了,就可以用imageWithData 把它构建成一个image

动画

用以下方法获取的图片
UIImage *image = [UIImage animatedImageNamed:@"vectanim" duration:1.0];
图片序列不写数字,如:vectanim1后面的1就不用写。

animatedImageNamed会把名为vectanim的序列图片都加载

duration表示要用多少时间加载完这组图片。

缺少过渡动画的问题:
如果想要过渡动画可以增加文件的帧数。


猜城市

模型设计
  1. UI:我们看的见得部分
  • ViewController:
    • 把内部的状态展示在界面上
    • 把用户在界面上的操作整理成一条消息,发给程序主体(也就是game对象)
    • ViewControllerGame要城市的图片、当前进展、游戏有没有结束、把用户 提供的名字发给”猜“的的方法
  • GameLevel:每个城市都封装成一个游戏关卡,猜对了就可以进入下一关。
  • City :每一个关卡都会有一个city对象,城市有名字,ID
    • ID是因为最后要把图片加载到内存里
    • 通过一个CityDB对象把图片封装起来
    • 为什么不直接在Game里写代码?如果以后想加更多的city,就不适合用直接在代码里硬编码的方式。
    • CityDB实际只保留了一组对city对象的引用,其实里面没有图片,只有cityID和名字。
  • UIImage:把CityDB文件放在Image里,每个文件是city+id.jpg
    • cityDB编译时,给了Game一个city的数组,当GamecityDB要城市图片时,cityDBID取出,拼city+id,然后UIImage从文件内把图片读取进来。
  • Game分两块:
    • 初始化:用shuffleCities随机给每个GameLevel创建出一个城市
    • 进入游戏:
      • 当用户的一个动作(猜+名字参数)通过ViewController把消息发给Game
      • GuessWithName方法开始工作:
        • 比较Name猜对了没
        • 根据比较Name的结果,调用updateScore(等级计算)方法
  • GameLevel
    • 把用户的一次猜测封装成一个猜测对象,注册到GameLevel里,然后判断GameLevelGuess次数是否达到上限,如果达到上限就失败并进入下一关,成功也进入下一关。
    • GameLevel里还有一个游戏有没有玩到最后一关的判断
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容