葡京网上娱乐场自媒体又平等不便箍咒:不得随意发布灾害性天气警报

iOS 实战开发课程笔记

1月1日自,修订后底《重庆市面貌灾害防御条例》正式施行。《条例》明确规定,灾害性天气警报和面貌灾害预警信号由采购、区县城(自治县)气象主管机构所属的气象台站按照职责分工统一向社会宣布,自媒体不得随意发布灾害性天气警报和气象灾害预警信号。

本贴旨在作针对极客班 《iOS
开发实战》第五期期课程视频重新学习的笔记。
对象是起一个于完好的 iOS
开发知识点框架和高速手册,我思找工作……所以,打结实点基础,你们了解的。
对一一内容的详细研究会以学了后敞开新贴深入探索。
简书我莫明白怎么补偿加目录,所以自己道说不定在网易上看会再次清晰点……篇幅过长。
当时是自己之网易博客账号,欢迎各位同学吐槽。
http://blog.csdn.net/mubinhuang/article/details/50649650
该贴仍于不断完善中。

这是自媒体收到了外一个“紧箍咒”,随着自媒体人和平台越来越普及,人们由此自媒体平台公布信息变换得十分便宜,较充分之流量直接代表可以吸收再多的店广告、软文收入。于是,有的自媒体人为了夺取人眼球,吸引关注量,甚至会不计后果的披露片来历不刚的无助新闻。

0 导论


据,早以2008年“5.12”汶川大震了后,网上和坊间就开始流传有消息《广东、海南、福建等地为拿发出很震、大海啸》,一时间人们自危。幸而当地有关地质专家、政府大等展开危机公关通过传统媒体、官方传媒当进行信息滚动式辟谣,才平稳了社会秩序。

0.1 技术支持

重复以,2011年的7·23甬温线特别重要铁路直通问题受到,就突发了谣言:“神秘手”图片吸引“掩埋在人”传言。

0.1.1 苹果技术支持

  • 技能文档打开方式 <br />Xcode软件 -> Help ->
    Documentation and API Reference<br
    />文档是于网上读取的,如果想使尤其快捷,可以优先进行下载。旧本子的模拟器也在此间安装。
    <br />Xcode -> Preferences -> Downloads
  • 开发者社区
    https://developer.apple.com
  • iOS文档库
    https://developer.apple.com/library/prerelease/ios/navigation/
  • WWDC 视频

拖欠微博帖子称,浏览《高清:动车追尾事故现场》的图片时发现,在搜救工作就终结晚,在起高架铁路桥上损坏下成为稀段落的动车车厢里居然还有人口。该微博一发布,就引来众网友热传。
这张让变成“神秘手”的图纸抓住了网上“掩埋在人”传言,引发了网友关于阴谋论的猜想。对这,该图拍摄者鞠焕宗很快辟谣,事实上为清理车厢中的救援人员的膀子。
 

0.1.2 其他技术支持

  • stack overflow 社区
  • OurCode 社区
  • Cocoa China 社区
  • V2EX 社区
  • GitHub (建议查看学习 awesome iOS 系列)

众人时时说“谣言止于智者”,但也时常说“智者千虑必有一失”。

0.2 学习方式

央目前,仅仅是微信公众号就是发生大概2000万只,还有微博、头长长的号当几十独自媒体平台。在这些平台达成想只要传一个极其的话题,太快太好了。所造成的阴暗面、被动、消极的论文氛围是少日外无法清除的。

0.2.1 方法

  • 信以为真看视频。
  • 理笔记。
  • 形成练习示例。

天气等自然灾害等信息,属于重点信息,极容易吸引恐慌。此次重庆市宣布《条例》规定“自媒体不得擅自发布灾害性天气警报”之前的几年工夫,先后来河南省、山东省、北京市、天津市相当于多数省市在《气象灾害防治条例》中,就明确规定:天气、气候实况,应当由观主管机构所属的气象台站根据防卫气象灾害和公共服务的用,按照任务为社会统一公布。其他任何集体以及村办不得为社会宣布气象灾害预报、警报、预警信号与气象、气候实况。

0.2.2 参考书

  • ios 9 programming fundamentals with swift
  • ios 7 programming fundamentals (Objective-C)

理所当然,“自媒体不得自由发布灾害性天气警报”,并无是自媒体带达的第一只约束。

0.2.3 App Programming Guide for

  • 界面基础

View Controller Programming Guide
View Controller Catalog
View Programming Guide
UIKit User Interface Catalog
Event Handing Guide

  • 图片和动画

Drawing and Printing Guide
Concurrency Programming Guide
Quartz 2D Programming Guide
Core Animation Programming Guide

  • 网络及存储

Network & Internet Starting Point (知道只趋势)
Networking Overview (了解个概念)
Data Management Starting Point (知道只样子)

  • 其他

Auto Layout Guide
Scroll View Programming Guide
Table View Programming Guide
Collection View Programming Guide

<br />

2017年5月2日,国家互联网信息办公室颁布新版《互联网新闻信息服务管理规定》,将各项新媒体还见面纳入到管理范畴,涉及到通过网站、应用程序、论坛、博客、微博客、公众账号、网络直播等花样为社会公众提供互联网新闻消息服务之,应当得到互联网新闻消息服务许可。

1 Hello Word


也就是说,没有将到“许可牌照”的新媒体,都拿无法采写新闻信息。新闻信息:包括关于政治、经济、军事、外交等社会公共事务的通讯、评论,以及关于社会突发事件的简报、评论。

1.1 创建新工

  • Create a new Xcode project
  • File -> New -> Project [shift + command + N]

然而,可以依照要求转载。

1.2 选择工程模板

得选择多种多样的工模板,包括 iOS, OS X, watchOS, tvOS 一般选择 iOS
-> Single View Application。

至今,对于自媒体的发生“禁令”,已经差不多形成一个完全闭环了。立对传统媒体继续没有,新媒体内容创业继续深入发展之2018年以来,不知是喜是忧。 

1.3 工程信息

  • Project Name:产品名称
  • Organization Name:组织名称
  • Organization Identifier:新产品唯一名,一般将企业域名反过来写。
  • Language:运行语言
  • Devices:运行设备(通用,iPhone,iPad)
  • Use Core Data:是否使用数据存储
  • Include Unit Tests:测试模块
  • Include UI Tests:UI测试模块

文/孙广聚 赵宏民    来源:媒媒哒

1.4 Git 仓库

版本控制
Source Control:Create Git repository on My Mac
累版本控制来专门篇幅。

1.5 Xcode界面打听

1.6 Storyboard

  • 图层识别
    入选图层之后,可以当 libraries -> identity inspector ->
    Document -> Label 中安图层名称,可以变更图层在 Storyboard 的
    Document Outline 中之称谓。以好识别。
  • 组件 library
    足拖动这里的各种零件到 canves 或内部对应之图层上。
  • 设置 Document Outline 显示名称
    入选组件 -> Indentity inspector -> Document -> Label
  • 设置 ViewController 尺寸
    选中 ViewController -> Attributes inspector -> Simulated
    Merices -> Size

1.7 模拟器

  • 显示尺寸调节
    Window -> Scale -> … [command + 1-5]
  • 设备操作
    Hardware -> …
  • 回去出厂设置
    Simulator -> Reset content and Settings…

1.8 真机调试

  • 长调试账号
    Xcode -> Preferences -> Accounts -> +
  • 装调试账号
    Workspace -> General -> Identity -> Team 进行分选 -> Fix
    issues
  • 运行
    首不善运行会提示错误,需要真机验证
    真机 -> 设置 -> 通用 -> 描述文件 -> 选中信任 -> 回到
    Xcode 再次运行

1.9 App 基本概念

  • iOS App 代码结构(这是 Objective-c 语言,Swift 有所不同,main
    文件会于躲)

    • main()
    • UIApplicationMain()(生成一个 UIApplication
      对象并安装成该用的代办。)
    • UIApplication 对象
    • UIApplicationDelegate
  • iOS App 运行条件
    • Sandbox
    • 得目录 NSHomeDirectory()
  • iOS 应用都是一个 Bundle
    • Bundle: 带有 Info.plist 字典的目
    • 通过 NSBundle 类访问中的资源
    • 要是经 mainBundle
    • resource bundle 和 framework(可实行动态库)
  • 查看 App Bundle
    设置栏中甄选设备 -> Generic iOS Device -> command + B 构建
    -> Workspace -> Products -> xxx.app -> 右键 查看文件
    -> 右键 显示包内容

<br />

3 Button – Storyboard 暨代码之间联系方式


介绍最常用的 Interface 组件之一 UIButton,以及它们的运方法。
为此介绍 Outlet Action 等概念。

3.1 UIButton

3.2 IBOutlet

  • IBOutlet Connection
    拿 Nib object 与 代码中之 IBOutlet 变量相连接

    • 于 Storyboard 中将组件和代码中的 IBOutlet 变量进行连续后,会以
      Storyboard 代码中多出这样同样截连接说明

      <connections>
          <outlet property="okLabel" destination="QJt-2z-ban" id="mhJ-Nu-TIR"/>
      </connections>
      // property 变量名称
      // destination 界面上的组件名称
      // id 标志这个连接本身
      
    • 运作时调用
      鉴于 xib
      中蕴藏的是界面模板,所以当允许的下,类实例代码会触发界面的实例化方法。
      说到底调用 [UINib instantiateWithOwner:options:]
      方法实例化界面。
      Owner 实际上是调用了一个比照名绑定的习性。
      [owner setValue:uiObj forKey:outlet.property]

实际自己好还扣留不理解就段以说啊……大概是说 outlet connection
其实是标了界面与代码之间的关联,然后以程序运行的时候,会通过一样雨后春笋
runtime
方法调用这种关涉,并基于界面模板实例化界面组件,从而生成组件绘制吧。

  • Action Connection

    • 界面事件接二连三 IBAction

      <connections>
          <action selector="buttonAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="BQA-pw-9f8"/>
      </connections>
      // selector 方法名称
      // eventType 事件类型
      

<br />

4 Image


图片流:界面全部由现成的图形做。耗内存,但是简便。
代码流:界面全部由于代码绘制而成为,省内存,适应性强。

4.1 UIImage

  • 图片加载

  • 图片动画

    let anmiationImage = UIImage.animatedImageNamed("ImageArrayName", duration: 2.0)
    // ImageArrayName 是动画图片的前缀,动画图片资源应该按照该名称后面加数字来命名。
    // duration 是总时长。
    // KeyNote 可以导出动画的每帧图片。
    

4.2 Assert Catalog

  • Assert Catalog 介绍

    模板会默认生成一个 Assert Catalog 文件同时其中起 Appicon 以用来为
    App 提供系统图标。
    直接用图名字的章程加载图片,虽然省事,但是由这样的做法会管图片缓存在内存中,在图于多尺寸比充分时会见照成内存压力。

  • Assert Catalog 功能

    • 补偿加图:直接拿图纸资源拖入 Asset Catalog,或者下的 + 号。

    • 资源属性:每个图片可以生三独尺码为供给不同之屏幕尺寸下。还好安装适用各种装备与各种特定尺寸
      Attributes -> Devices。

    • 图片切片:点击图片 -> Attributes -> Slicing -> Slices
      -> …

  • 适用矢量图片

    • 放置对应之图片格式进去 Assert Catalog 之后,然后设置其性质。

    • Attributes -> Devices -> Scale Factors -> Single Vector

<br />

5 第一个 App


5.1 需求分析

  • 详细了解下需求,需要得体了解用户想使的凡啊。
  • 翔规划下之逻辑流程,各个模块功能的因和去向。

5.2 程序设计

平衡设计原则:设计程序时也未来恐怕的需要做好准备。但是这种办法有好有坏,有时候考虑太多,就会见促成当前业务难以完成。如果完全只是考虑当下,就可能多未来重构的次数。中间的过用靠程序员把握。

  • 活动通流程图,确认游戏逻辑
  • 承认静态数据结构

5.3 示例代码结构

依次代码模块之间的关联和关联之阳。

5.4 Keynote 课件展示

<br />

6 View Controller


6.1 简单的设计模式介绍

6.2 UIViewController

  • UIViewController 介绍

  • 获取 ViewController

    • 创建 rootViewController
      • Info.plist 中的 UIMainStoryboardFile, NSMainNibFile
        指定了干净控制器的源于。
      • UIApplication 会通过调用
        _runWithMainScene:transitionContext:completion: 方法。
      • 然后调用 _loadMainInterfaceFile 来取出 Info.plist 中
        UIMainStoryboardFile 或者 NSMainNibFile 信息。
      • 设是前者,则再次调用
        _loadMainStoryboardFileNamed:bundle:
      • 而是后者,则另行调用 _loadMainNibFileNamed:bundle:
    • 加载好 rootViewController 之后就是把这个视图控制器赋值给
      appDelegate.window.rootViewController。
    • 一旦上述措施初始化界面失败,则会调用
      UIApplicationDelegate didFinshLaunch
      方法来给程序员一个用到程序初始化界面的空子。最开始经常,也是只有及时一个道来初始化界面的。
    • 假若上述两种植办法都尚未让 appDelegate.window.rootViewController
      赋值,则是应用之 window 就会吗 nil 显示黑屏.
  • 获取 ViewController 的 View

    • 从定义 ViewController 装载过程
      • 调用 [UIViewController loadView]
        如果出落实,调用之后虽未会见调用后面的计了。如果是默认实现则会调用下面的其余方法。
      • 调用 [UIViewController nibName] 如果是默认模板,则 nibName
        应该是出自 Storyboard。如果是代码调用 initWithNibName
        则由程序员指定 nib. 如果两岸都无是,则会调用下面的办法。
      • [UIViewController exisitingNibNameMatchingClassName:bundle:],它会冲
        ViewController 方法猜测并且查找
        Nib,如果还找无交,系统会创一个空视图。
    • 要点
      • isViewLoaded 判断 ViewController 的 View 是否曾加载好了。
      • loadView 中未能够调用 super.

6.3 View Controller Lifecycle

6.3 多个 View Controller

  • 弹来新视图的计 presentViewController:animation:completion:

    • UIViewController 的 modalPresentationStyle
      是安装弹来控制器风格的属性。
    • UIViewController 的 modalTransitionStyle
      是安弹出动画风格的性。
  • iOS 8+ 之后新办法 showViewController:sender

  • 放活控制器 dismissViewControllerAnimated:completion:

  • 回传数据:把老子控制器作为子控制器的代办,通过回调函数来传递数据。并且鉴于父控制器来控制子控制器的获释,而非是分支控制器自己调用
    dismissViewControllerAnimated:completion: 方法。

<br />

7 Storyboard


Storyboard 也是一个 xib 文件,只是它其中未只是是拓宽 View,而是停
Scene.
得点击 ViewController 然后直拖来 Segue 到另外 ViewController
当中,从而开创没有组件触发事件之 Segue。

7.1 Storyboard Segue

  • 采用代码进行 Segue 跳转

    func segueAction() {
        // 0 以 Segue 跳转
        performSegueWithIdentifier("SegueIdentifier", sender: nil)
    
        // 1 获取 ViewController
        if let nextViewController = storyboard?.instantiateViewControllerWithIdentifier("ViewControllerIdentifier") {
            showViewController(nextViewController, sender: nil)
        }
    }
    
  • Segue 传值

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // 每次有 Segue 被触发就会调用此函数,以提供传值时机。
    }
    
  • Storyboard Segue 回退

    @IBAction override func unwindForSegue(unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController) {
        // @IBAction func unwindFuncName(segueName: UIStoryboardSegue) { }
        // 名称可以随意,参数至少要有一个 UIStoryboardSegue。用来作为 Storyboard 回退触发事件。
    }
    

7.2 多 Storyboard

  • 现场景无限多的时,可以把 Storyboard
    分成基本上只公文。场景里的对接,可以透过个别种植艺术落实。

    • Storyboard Reference 组件,跟 ViewController 组件一样可以拖动到
      Canvas 上。并且可以设置它对的 Storyboard 文件,Reference
      ID(如果未指定就是 initial View Controller)。
    • 当选需要停放在新 Storyboard 上的 ViewController,然后点击 Editor
      -> Refactor to Storyboard。然后就是会见创造新的 Storyboard
      文件,并拿当选的 ViewController 放置到中间。
  • 得其他 Storyboard

    func muchStoryboard() {
        // 根据名称获取 Storyboard
        let storyboard = UIStoryboard(name: "StoryboardName", bundle: NSBundle.mainBundle())
    }
    

<br />

8 App Lifecycle


8.1 应用启动

  • main – 启动程序

  • UIApplicationMain() – 启动以代理

  • UIApplication – 启动信息循环

  • APPDelegate – 生成用代理

  • 据悉 Storyboard 或者代码创建的 ViewController 加载
    rootViewController

8.2 用户互动

RunLoop Mode: [source] 其实就是是事件源。

  • main run loop 循环关注事件源。接收事件。

  • 吸收到事件就是传递让 Application object。

  • Application object 对事件进展分发。

  • 事件因代码逻辑反馈到视图上。

8.3 AppDelegate

  • 出生

    • application:willFinishLaunchingWithOptions: 事件
      UI 已经加载出来了。RootViewController
      已经创造好,只是还尚未看它的 view 方法。
      应用级的初始化工作极端好还居这职位,但是不要当这边召开顶耗时的波。

    Options 会提供启动状态信息。
    App Programming Guide for iOS 文档中之 Preserving Your App’s
    Visual Appearance Across Launches 中有详细的辨证。

    • application:didFinishLaunchingWithOptions: 事件
      界面都还原了了,但是 UI
      还并未放置到界面及。这时候代码已经初步实践,但是界面看无展现,也未见面进行响应。
      仍是使用级别之初始化机会。

    Options 会提供启动状态信息。
    * applicationDidBecomeActive: 事件
    动都使从头倒了之会。

  • 跻身未欢状态

    • applicationWillResignActive: 事件
  • 进后台状态

    • applicationDidEnterBackground: 事件
      顿时是一个短的时机,默认是 5 秒内得。但是可以通过
      beginBackgroundTask 方法可获取大约 10 分钟的后台运行事件。
      只要还待重增长的波,需要编制后台运行程序。详细查看文档。
  • 使关闭

    • applicationWillTerminate: 事件
      倘若您的采取正被吊于没多久,然后就是给关闭了,就见面收取至之事件。如果您都深受吊起于后台了,那在关闭的时光就是非会见吸纳这通告。
  • 动用复活

    • applicationWillEnterForeground: 事件
      动用将返回前台的轩然大波。

8.4 移动应用的特点。

移步使用的使会怪的零散,会以各种状态被来转切换。

<br />

9 Navigation


9.1 Navigation Bar

9.2 UINavigationController

  • Navigation Controller 的结构(属性)
    • viewControllers
      (视图控制器数组,管理方导航控制器的拥有视图控制器。)

      • topViewController (最顶上之视图控制器,绝大多数上与
        visibleViewController 是跟一个,但也未决。)
      • visibleViewController (当前亮的视图控制器。)
    • navigationBar
    • toolbar
    • delegate

  • 深受现有的 ViewController 添加 NavigationController

    • 选中 ViewController -> Editor -> Embed In -> Navigation
      Controller
    • 拖动 NavigationController 到 Canvas -> 设置 ViewController
      成为其 rootViewController
  • 以 UINavigationController 的 Delegate
    方法会来拓展导航时之多少传递(但是尽量要用 Segue
    方法来进展多少传递)

    • navigationController:willShowViewController:animated:
      (一般数量传递会在这边开展。)
    • navigationController:didShowViewController:animated:

9.3 在代码中使用 NavigationController

并无推荐用代码创建,毕竟用 Storyboard 就异常有益于了。
setViewControllers:animated: 比较起时机意义,可以被导航不用每次都由
rootViewController 开始。更加灵敏。

9.4 自定义导航栏

叩问以下顺序类的性,并根据实际要求从定义。
苹果有提供 Customizing
UINavigationBar
的代码示例,里面来丰富多采的自定义方法。

  • UINavigationBar
  • UIBarItem
    • UIBarButtonItem
  • UIToolBar

导航栏标题之上的小字在 Navigation Item -> Prompt 中安。

<br />
iOS 实战开发课程笔记

本贴旨在作针对极客班 《iOS
开发实战》第五期期课程视频重新学习的笔记。
对象是确立一个比完好的 iOS 开发知识点框架和便捷手册。
针对各个内容之事无巨细研究会开启新贴深入探索。
该贴仍于不断完善中。

0 导论


0.1 技术支持

0.1.1 苹果技术支持

  • 技能文档打开方式 <br />Xcode软件 -> Help ->
    Documentation and API Reference<br
    />文档是以网上读取的,如果想如果更加快捷,可以预先进行下载。旧本子的模拟器也当此间安装。
    <br />Xcode -> Preferences -> Downloads
  • 开发者社区
    https://developer.apple.com
  • iOS文档库
    https://developer.apple.com/library/prerelease/ios/navigation/
  • WWDC 视频

0.1.2 其他技术支持

  • stack overflow 社区
  • OurCode 社区
  • Cocoa China 社区
  • V2EX 社区
  • GitHub (建议查看学习 awesome iOS 系列)

0.2 学习道

0.2.1 方法

  • 认真看视频。
  • 理笔记。
  • 得练习示例。

0.2.2 参考书

  • ios 9 programming fundamentals with swift
  • ios 7 programming fundamentals (Objective-C)

0.2.3 App Programming Guide for

  • 界面基础

View Controller Programming Guide
View Controller Catalog
View Programming Guide
UIKit User Interface Catalog
Event Handing Guide

  • 图片和动画

Drawing and Printing Guide
Concurrency Programming Guide
Quartz 2D Programming Guide
Core Animation Programming Guide

  • 纱以及存储

Network & Internet Starting Point (知道只趋势)
Networking Overview (了解个概念)
Data Management Starting Point (知道只样子)

  • 其他

Auto Layout Guide
Scroll View Programming Guide
Table View Programming Guide
Collection View Programming Guide

<br />

1 Hello Word


1.1 创建新工

  • Create a new Xcode project
  • File -> New -> Project [shift + command + N]

1.2 选择工程模板

好选取多种多样的工程模板,包括 iOS, OS X, watchOS, tvOS 一般选 iOS
-> Single View Application。

1.3 工程信息

  • Project Name:产品名称
  • Organization Name:组织称
  • Organization Identifier:新产品唯一名,一般将公司域名反过来写。
  • Language:运行语言
  • Devices:运行设备(通用,iPhone,iPad)
  • Use Core Data:是否利用数据存储
  • Include Unit Tests:测试模块
  • Include UI Tests:UI测试模块

1.4 Git 仓库

版本控制
Source Control:Create Git repository on My Mac
此起彼伏版本控制来特别篇幅。

1.5 Xcode界面打探

1.6 Storyboard

  • 图层识别
    入选图层之后,可以当 libraries -> identity inspector ->
    Document -> Label 中安图层名称,可以变动图层在 Storyboard 的
    Document Outline 中之名。以有利于识别。
  • 组件 library
    可拖动这里的各种零件到 canves 或内部对应之图层上。
  • 安 Document Outline 显示名称
    当选组件 -> Indentity inspector -> Document -> Label
  • 设置 ViewController 尺寸
    选中 ViewController -> Attributes inspector -> Simulated
    Merices -> Size

1.7 模拟器

  • 展示尺寸调节
    Window -> Scale -> … [command + 1-5]
  • 配备操作
    Hardware -> …
  • 返出厂设置
    Simulator -> Reset content and Settings…

1.8 真机调试

  • 累加调试账号
    Xcode -> Preferences -> Accounts -> +
  • 装调试账号
    Workspace -> General -> Identity -> Team 进行选 -> Fix
    issues
  • 运行
    首蹩脚运行会提示错误,需要真机验证
    真机 -> 设置 -> 通用 -> 描述文件 -> 选中信任 -> 回到
    Xcode 再次运行

1.9 App 基本概念

  • iOS App 代码结构(这是 Objective-c 语言,Swift 有所不同,main
    文件会被埋伏)

    • main()
    • UIApplicationMain()(生成一个 UIApplication
      对象并设置成该应用的代办。)
    • UIApplication 对象
    • UIApplicationDelegate
  • iOS App 运行条件
    • Sandbox
    • 收获目录 NSHomeDirectory()
  • iOS 应用还是一个 Bundle
    • Bundle: 带有 Info.plist 字典的目录
    • 经 NSBundle 类访问中的资源
    • 首要是由此 mainBundle
    • resource bundle 和 framework(可尽动态库)
  • 查看 App Bundle
    设置栏中精选设备 -> Generic iOS Device -> command + B 构建
    -> Workspace -> Products -> xxx.app -> 右键 查看文件
    -> 右键 显示包内容

<br />

3 Button – Storyboard 与代码之间联系方式


介绍最常用的 Interface 组件之一 UIButton,以及它们的运用方法。
于是介绍 Outlet Action 等概念。

3.1 UIButton

3.2 IBOutlet

  • IBOutlet Connection
    拿 Nib object 与 代码中的 IBOutlet 变量相连接

    • 在 Storyboard 中将组件和代码中之 IBOutlet 变量进行连续后,会在
      Storyboard 代码中几近出来这么平等段落连接说明

      <connections>
          <outlet property="okLabel" destination="QJt-2z-ban" id="mhJ-Nu-TIR"/>
      </connections>
      // property 变量名称
      // destination 界面上的组件名称
      // id 标志这个连接本身
      
    • 运转时调用
      鉴于 xib
      中储存的凡界面模板,所以在同意的下,类实例代码会触发界面的实例化方法。
      最后调用 [UINib instantiateWithOwner:options:]
      方法实例化界面。
      Owner 实际上是调用了一个论名绑定的特性。
      [owner setValue:uiObj forKey:outlet.property]

实则我自己都看无清楚就段在游说啊……大概是说 outlet connection
其实是标了界面及代码之间的涉,然后在程序运行的时段,会通过一致密密麻麻
runtime
方法调用这种关涉,并依据界面模板实例化界面组件,从而生成组件绘制吧。

  • Action Connection

    • 界面事件接二连三 IBAction

      <connections>
          <action selector="buttonAction:" destination="BYZ-38-t0r" eventType="touchUpInside" id="BQA-pw-9f8"/>
      </connections>
      // selector 方法名称
      // eventType 事件类型
      

<br />

4 Image


图片流:界面全部是因为现成的图做。耗内存,但是简便。
代码流:界面全部由代码绘制而成,省内存,适应性强。

4.1 UIImage

  • 图表加载

  • 图表动画

    let anmiationImage = UIImage.animatedImageNamed("ImageArrayName", duration: 2.0)
    // ImageArrayName 是动画图片的前缀,动画图片资源应该按照该名称后面加数字来命名。
    // duration 是总时长。
    // KeyNote 可以导出动画的每帧图片。
    

4.2 Assert Catalog

  • Assert Catalog 介绍

    模板会默认生成一个 Assert Catalog 文件又其中起 Appicon 以用于给
    App 提供系统图标。
    一直用图形名字的计加载图片,虽然便民,但是出于这样的做法会拿图纸缓存在内存中,在图片于多尺寸比生时见面照成内存压力。

  • Assert Catalog 功能

    • 补充加图:直接以图片资源拖入 Asset Catalog,或者下的 + 号。

    • 资源属性:每个图片可以发三个尺码为提供被不同的屏幕尺寸下。还得设置适用各种设施及各种特定尺寸
      Attributes -> Devices。

    • 图表切片:点击图片 -> Attributes -> Slicing -> Slices
      -> …

  • 适用矢量图片

    • 停对应之图片格式进去 Assert Catalog 之后,然后设置其性。

    • Attributes -> Devices -> Scale Factors -> Single Vector

<br />

5 第一个 App


5.1 需求分析

  • 详见摸底下需求,需要适量了解用户想只要的凡什么。
  • 详尽规划下之逻辑流程,各个模块功能的因和去向。

5.2 程序设计

平衡设计原则:设计程序时也未来或的需求做好准备。但是这种办法有好有坏,有时候考虑太多,就见面促成当前事情难以完成。如果全只是考虑当下,就可能增加未来重构的次数。中间的度欲靠程序员把握。

  • 活动通流程图,确认游戏逻辑
  • 承认静态数据结构

5.3 示例代码结构

依次代码模块之间的关联以及关联之肯定。

5.4 Keynote 课件展示

<br />

6 View Controller


6.1 简单的设计模式介绍

6.2 UIViewController

  • UIViewController 介绍

  • 获取 ViewController

    • 创建 rootViewController
      • Info.plist 中的 UIMainStoryboardFile, NSMainNibFile
        指定了根控制器的源于。
      • UIApplication 会通过调用
        _runWithMainScene:transitionContext:completion: 方法。
      • 接下来调用 _loadMainInterfaceFile 来取出 Info.plist 中
        UIMainStoryboardFile 或者 NSMainNibFile 信息。
      • 设若是前者,则还调用
        _loadMainStoryboardFileNamed:bundle:
      • 倘若是后人,则再次调用 _loadMainNibFileNamed:bundle:
    • 加载好 rootViewController 之后便管此视图控制器赋值给
      appDelegate.window.rootViewController。
    • 假定上述方法初始化界面失败,则会调用
      UIApplicationDelegate didFinshLaunch
      方法来让程序员一个施用程序初始化界面的机。最初步经常,也是只有马上一个措施来初始化界面的。
    • 若以上两栽方式都尚未受 appDelegate.window.rootViewController
      赋值,则这以之 window 就会见呢 nil 显示黑屏.
  • 获取 ViewController 的 View

    • 从今定义 ViewController 装载过程
      • 调用 [UIViewController loadView]
        如果有落实,调用之后就非会见调用后面的方法了。如果是默认实现则会调用下面的其余方。
      • 调用 [UIViewController nibName] 如果是默认模板,则 nibName
        应该是源于 Storyboard。如果是代码调用 initWithNibName
        则由程序员指定 nib. 如果双方都非是,则会调用下面的法。
      • [UIViewController exisitingNibNameMatchingClassName:bundle:],它会冲
        ViewController 方法猜测并且查找
        Nib,如果还找无交,系统会创一个空荡荡视图。
    • 要点
      • isViewLoaded 判断 ViewController 的 View 是否早已加载好了。
      • loadView 中不可知调用 super.

6.3 View Controller Lifecycle

6.3 多个 View Controller

  • 弹来新视图的法子 presentViewController:animation:completion:

    • UIViewController 的 modalPresentationStyle
      是装弹来控制器风格的性质。
    • UIViewController 的 modalTransitionStyle
      是设置弹出动画风格的特性。
  • iOS 8+ 之后新点子 showViewController:sender

  • 刑满释放控制器 dismissViewControllerAnimated:completion:

  • 回传数据:把大人控制器作为子控制器的代办,通过回调函数来传递数据。并且鉴于父控制器来控制子控制器的获释,而非是分控制器自己调用
    dismissViewControllerAnimated:completion: 方法。

<br />

7 Storyboard


Storyboard 也是一个 xib 文件,只是其里面未单独是拓宽 View,而是停
Scene.
得点击 ViewController 然后一直拖来 Segue 到另外 ViewController
当中,从而开创没有组件触发事件之 Segue。

7.1 Storyboard Segue

  • 运用代码进行 Segue 跳转

    func segueAction() {
        // 0 以 Segue 跳转
        performSegueWithIdentifier("SegueIdentifier", sender: nil)
    
        // 1 获取 ViewController
        if let nextViewController = storyboard?.instantiateViewControllerWithIdentifier("ViewControllerIdentifier") {
            showViewController(nextViewController, sender: nil)
        }
    }
    
  • Segue 传值

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // 每次有 Segue 被触发就会调用此函数,以提供传值时机。
    }
    
  • Storyboard Segue 回退

    @IBAction override func unwindForSegue(unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController) {
        // @IBAction func unwindFuncName(segueName: UIStoryboardSegue) { }
        // 名称可以随意,参数至少要有一个 UIStoryboardSegue。用来作为 Storyboard 回退触发事件。
    }
    

7.2 多 Storyboard

  • 实地景无限多的时,可以管 Storyboard
    分成基本上个文本。场景内的对接,可以透过个别栽办法落实。

    • Storyboard Reference 组件,跟 ViewController 组件一样可拖动到
      Canvas 上。并且可以安装它对的 Storyboard 文件,Reference
      ID(如果无点名就是 initial View Controller)。
    • 入选需要停放于初 Storyboard 上之 ViewController,然后点击 Editor
      -> Refactor to Storyboard。然后就是见面创造新的 Storyboard
      文件,并拿入选的 ViewController 放置到其中。
  • 抱其它 Storyboard

    func muchStoryboard() {
        // 根据名称获取 Storyboard
        let storyboard = UIStoryboard(name: "StoryboardName", bundle: NSBundle.mainBundle())
    }
    

<br />

8 App Lifecycle


8.1 应用启动

  • main – 启动程序

  • UIApplicationMain() – 启动以代理

  • UIApplication – 启动信息循环

  • APPDelegate – 生成采取代理

  • 基于 Storyboard 或者代码创建的 ViewController 加载
    rootViewController

8.2 用户互动

RunLoop Mode: [source] 其实就是是事件源。

  • main run loop 循环关注事件源。接收事件。

  • 收到事件就是传递给 Application object。

  • Application object 对事件进行分发。

  • 事件因代码逻辑反馈及视图上。

8.3 AppDelegate

  • 出生

    • application:willFinishLaunchingWithOptions: 事件
      UI 已经加载出来了。RootViewController
      已经创办好,只是还尚未看它的 view 方法。
      应用级的初始化工作极端好还置身这职务,但是不用当此处举行最耗时的风波。

    Options 会提供启动状态葡京网上娱乐场信息。
    App Programming Guide for iOS 文档中之 Preserving Your App’s
    Visual Appearance Across Launches 中起详实的征。

    • application:didFinishLaunchingWithOptions: 事件
      界面就还原了了,但是 UI
      还并未放到界面上。这时候代码已经开始实践,但是界面看无展现,也无见面开展响应。
      仍是采取级别之初始化机会。

    Options 会提供启动状态信息。
    * applicationDidBecomeActive: 事件
    动都设从头倒了的机遇。

  • 跻身未欢状态

    • applicationWillResignActive: 事件
  • 进后台状态

    • applicationDidEnterBackground: 事件
      立刻是一个急促之空子,默认是 5 秒内得。但是可由此
      beginBackgroundTask 方法可以赢得大约 10 分钟之后台运行事件。
      若是还用再丰富之轩然大波,需要编制后台运行程序。详细查看文档。
  • 以关闭

    • applicationWillTerminate: 事件
      如您的动正被吊于没多久,然后就是为关闭了,就会见收至之事件。如果您曾深受吊起于后台了,那在关闭的时刻即便非会见接受这通告。
  • 运用复活

    • applicationWillEnterForeground: 事件
      运用将返回前台的轩然大波。

8.4 移动应用的性状。

倒采用之用会十分的零碎,会以各种状态中来转切换。

<br />

9 Navigation


9.1 Navigation Bar

9.2 UINavigationController

  • Navigation Controller 的结构(属性)
    • viewControllers
      (视图控制器数组,管理方导航控制器的装有视图控制器。)

      • topViewController (最顶上的视图控制器,绝大多数时刻同
        visibleViewController 是和一个,但为无绝。)
      • visibleViewController (当前著的视图控制器。)
    • navigationBar
    • toolbar
    • delegate

  • 吃现有的 ViewController 添加 NavigationController

    • 选中 ViewController -> Editor -> Embed In -> Navigation
      Controller
    • 拖动 NavigationController 到 Canvas -> 设置 ViewController
      成为其 rootViewController
  • 动用 UINavigationController 的 Delegate
    方法会来进展导航时之数据传递(但是尽量要用 Segue
    方法来展开数量传递)

    • navigationController:willShowViewController:animated:
      (一般数量传递会在此展开。)
    • navigationController:didShowViewController:animated:

9.3 在代码中动用 NavigationController

并无引进用代码创建,毕竟用 Storyboard 就生便利了。
setViewControllers:animated: 比较起时机意义,可以为导航不用每次都于
rootViewController 开始。更加灵活。

9.4 自定义导航栏

刺探以下依次类的属性,并根据实际要求由定义。基本上还是 Storyboard
中之操作,太简单粗暴了无法言语叙述。
苹果来供 Customizing
UINavigationBar
的代码示例,里面有多种多样的自定义方法。

  • UINavigationBar
  • UIBarItem
    • UIBarButtonItem
  • UIToolBar

导航栏标题之上的小楷在 Navigation Item -> Prompt 中装置。

<br />

10 TabBarController


10.1 UITabBarController 的结构

Tab Bar Item 一般不跳五个,否则会受隐形。

  • tabBar

    • UITabBarItem
    • .moreNavigationController
  • viewControllers

    • customizableViewControllers
  • selectedViewController

  • delegate

    • UITabBarControllerDelegate

10.2 UITabBarItem

特性对应样式。

10.3 在代码中以 UITabBarController

难忘在安的常如果装好 ViewController 的 tabBarItem 属性。

10.4 自定义 TabBar

图标的以要严格按照系统定义来之所以,否则会给用户混乱。

  • 简单易行定制

  • 中等按钮

    放置 5 只页面。然后利用一个新的视图覆盖中等的那个按钮。

    @implementation MyTabBar
    - (void) viewWillAppear:(BOOL)animated {
        [self addCenterButtonWithImage:[UIImage imageNamed:@"camera"] highlightImage:nil];
    }
    
    // 计算按钮的位置并且放置到中间
    -(void) addCenterButtonWithImage:(UIImage*)buttonImage highlightImage:(UIImage*)highlightImage
    {
        UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
        button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
        [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
        [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted];
    
        CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
        CGPoint center = self.tabBar.center;
        center.y = center.y - heightDifference/2.0 - self.tabBar.frame.size.height/3.0;
        button.center = center;
    
        [button addTarget:self action:@selector(middleButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    
        [self.view addSubview:button];
    }
    
    // It is OK to replace IBAction with void here.
    -(IBAction)middleButtonTapped:(id)sender {
        [self showViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"middlepopvc"] sender:self];
    }
    
  • 再次威猛的更动

    定制 UITableViewController,具体查看代码实现。( VerticalBar )

      ![](http://upload-images.jianshu.io/upload_images/721097-ff083038d253a2c2?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

<br />

11 UITableView


UITableView
是普通支付使用最累之零件有。由于自前面曾经开过不少用到,所以听课的时光多比简略的物便从未进展记录了。建议或如多举行几独
Demo 进行演习,并且多看文档。熟悉 UITableViewDataSource 以及
UITableViewDelegate 的各种办法。
倘要高度定制,还欲了解一下 UIScrollViewDelegate
的方法,UITableViewDelegate
协议呢继续自它,所以她的计吗同等产生因此,这样可给你的 TableView
更加灵敏个性。

  • 认识 UITableView

  • 一个 TableView 需要的功效。

  • iOS 中的 UITableView 结构

    • UITableView
    • UITableViewCell
      • UIView
    • UITableViewDataSource
    • UITableViewDelegate
    • NSIndexPath
      • row
      • section
  • UITableView 学习路线

11.1 UITableView 的主干采用

datas 是 [[String]] 格式的言传身教数据。

  • 设置 UITableView 的风格:.style

  • 设置 .dataSource 实现 UITableViewDataSource 中之常用方法。

    // MARK: - UITableViewDataSource
    // 设置表格 Section 数量
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return datas.count
    }
    // 设置各个 Section 的 Row 数量
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return datas[section].count
    }
    // 设置每个 Cell 的具体内容
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("CellIndetifier")!
        cell.textLabel?.text = datas[indexPath.section][indexPath.row]
        return cell
    }
    // 设置表格表头文字
    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "Header"
    }
    // 设置表格表尾文字
    func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? {
        return "Footer"
    }
    
  • 设置 .delegate 实现 UITableViewDelegate 中的常用方法。

    // MARK: - UITableViewDelegate
    // 设置表格各个 Section 的表头视图。
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        return nil
    }
    // 设置表格各个 Section 的表尾视图。
    func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return nil
    }
    // 选中某 Row 时触发的事件。
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        // ...
    }
    

11.2 UITableViewCell

专注:prepareForSegue 事件触发时,目标 ViewController 还不曾调用
ViewDidLoad

  • Cell 数据传递
    didSelectRowAtIndexPath 方法被调用 performSegueWithIdentifier
    的语,可以一直把 indexPath 作为 sender 参数传递到
    prepareForSegue 中。这样就是可拿对许数据传递让下一个
    ViewController 了。
  • Cell 高度
    • 富有行都一样大则装 tableView.rowHeight 会通过
      UITableViewAutomaticDimension 自动还推算调整一下。
    • 惊人都不比则透过 UITableViewDelegate
      tableView:heightForRowAtIndexPath: 方法进行设置。
    • 呢得通过安装 tableView.estimatedRowHeight
      来设置一个预估高度。
  • 定制 Cell – Prototype Cell

    • 好以 Storyboard 中的 cell 进行自定义设计。

    • 通过 xib 创建 Cell

      let nib = UINib(nibName: "CellXibName", bundle: nil) // nil is UIBundle.mainBundle()
      tableView.registerNib(nib, forCellReuseIdentifier: "CellIdentifier")
      
    • 由此全代码设置 Cell,但是得要当从定义 Cell 类中重载
      initWithStyle 方法。

      tableView.registerClass(CustomCell.self, forCellReuseIdentifier: "CellIdentifier")
      

11.3 UITableViewController

RefreshControl 的使用。

  • 下拉刷新支持

  • 数刷新

11.4 UITableView 交互

  • 选中

  • 支配表滚动

  • 报表编辑支持

  • 编模式处理过程

  • 带索引的表

  • 目录本地化

  • 高亮和菜单

  • 报表和寻找

<br />


<br />


<br />

参考资料


知乎:品雪