Perl入门1,通过shell执行perl语句

前言     

iOS 实战开发课程笔记

基于《Perl语言参考手册》介绍,Perl是Practical Extraction and Report
Language
的取首字母缩写(实用报表提取语言),它是由Larry沃尔设计的,并由她不断更新和爱惜,用于在UNIX环境下编制程序。

本贴意在作为对极客班 《iOS
开发实战》第伍期期课程摄像重新学习的笔记。
目的是树立1个相比较完整的 iOS
开发知识点框架以及高效手册,小编想找工作……所以,打结实点基础,你们懂的。
对各种内容的事无巨细商量会在就学完成后拉开新贴深远探索。
简书笔者不知情怎么添加目录,所以自身认为也许在天涯论坛上看会更清晰点……篇幅过长。
那是本人的天涯论坛博客账号,欢迎各位同学吐槽。
http://blog.csdn.net/mubinhuang/article/details/50649650
该贴仍在不断完善中。

  • Perl具有高级语言(如C)的无敌能力和灵活性。事实上,你将看到,它的好多表征是从C语言中借用来的。
  • 与脚本语言壹样,Perl不供给编译器和链接器来运作代码,你要做的只是写出程序并告诉Perl来运行而已。那象征Perl对于小的编制程序难题的短平快消除方案和为重型事件成立原型来测试秘密的化解方案是分外好好的。
  • Perl提供脚本语言(如sed和awk)的全体机能,还装有它们所不富有的不在少数效益。Perl还协理sed到Perl及awd到Perl的翻译器。

0 导论


      一言以蔽之,Perl象C一样强大,象awk、sed等剧本描述语言一样方便

0.一 技术帮助

正文

0.一.一 苹果技术辅助

接触Perl是由于看到perl在文本处理上的英勇,百度事后发现网上提到的中央也是用perl来做文本操作,比如在贰个文书中替换特定字符串,

0.1.二 别的技术支持

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

perl -pi -e
‘s/originaltextstring/replacementstring/g’ filename

0.二 学习形式

参数-pi -e的趣味不是很掌握,结尾的g表示替换文书档案中冒出的说有11分,

0.2.1 方法

  • 信以为真看录像。
  • 收拾笔记。
  • 姣好练习示例。

那句话一向当做shell语句在极端履行可能写在shell脚本中,

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.新建一个用于测试的文件,输入一些内容

1 Hello Word


  vi testperlreplace

一.壹 成立新工程

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

二.文件创设达成看一下自己写了什么内容:

一.二 选取工程模板

能够选择各个各类的工程模板,包涵 iOS, OS X, watchOS, tvOS 一般选用 iOS
-> Single View Application。

     cat testperlreplace

壹.叁 工程音信

  • Project Name:产品名称
  • Organization Name:协会名称
  • Organization Identifier:新产品唯一名,1般把公司域名反过来写。
  • Language:运营语言
  • Devices:运维设备(通用,诺基亚,平板电脑)
  • Use Core Data:是还是不是选用数据存款和储蓄
  • Include Unit Tests:测试模块
  • Include UI Tests:UI测试模块

1.4 Git 仓库

版本控制
Source Control:Create Git repository on My Mac
一而再版本控制有尤其篇幅。

     test ni da ye
     nidayede testtest

壹.伍 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

叁.现行交替个中有着的test为hello,

1.7 模拟器

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

  perl -pi -e ‘s/test/hello/g’
testperlreplace 

一.八 真机调节和测试

  • 丰裕调试账号
    Xcode -> Preferences -> Accounts -> +
  • 安装调节和测试账号
    Workspace -> General -> Identity -> Team 进行精选 -> Fix
    issues
  • 运行
    第贰遍运维会提醒错误,须求真机验证
    真机 -> 设置 -> 通用 -> 描述文件 -> 选中国国投任 -> 回到
    Xcode 再一次运营

4.现行反革命查阅文本内容应当早就变了,

1.玖 App 基本概念

  • iOS App 代码结构(那是 Objective-c 语言,斯维夫特 有所分化,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 />

     cat testperlreplace

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


介绍最常用的 Interface 组件之一 UIButton,以及它的行使方法。
从而介绍 Outlet Action 等概念。


3.1 UIButton

  hello ni da ye
  nidayede hellohello

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 介绍

    模板会暗中认可生成2个 Assert Catalog 文件同时个中有 Appicon 以用来给
    App 提供系统图标。
    直接用图片名字的格局加载图片,固然省事,可是由于那样的做法会把图纸缓存在内部存款和储蓄器中,在图纸较多尺寸较大时会照成内部存款和储蓄器压力。

  • Assert Catalog 功能

    • 添加图片:直接将图纸能源拖入 Asset Catalog,大概上面的 + 号。

    • 能源属性:每一种图片能够有三个尺码以提须要区别的荧屏尺寸使用。还足以设置适用种种装备和各类特定尺寸
      Attributes -> Devices。

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

  • 适用矢量图片

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

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

<br />

关于perl
前边的-p,-i,-e代表的意思,google后有个老外解答了那个难题,不知正确性怎样:http://www.linuxquestions.org/questions/programming-9/perl-replace-text-in-file-476382/

5 第一个 App


 

伍.一 供给分析

  • 详细摸底应用要求,供给适度精通用户想要的是什么。
  • 详尽规划利用的逻辑流程,各类模块成效的缘故和去向。
  • -p
    告诉Perl对前面添加的文件名参数举行遍历,大致和sed中的那段代码效果类似

伍.二 程序设计

平衡设计原则:设计程序时为以后恐怕的供给做好准备。不过那种方法有好有坏,有时候思虑太多,就会招致当前事情难以完结。假诺完全只怀恋当下,就只怕扩张现在重构的次数。中间的度必要靠程序员把握。

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

 

五.3 示例代码结构

逐一代码模块之间的关联和关系的无人不晓。

  while (<>) {
  … # your program goes here
  } continue {
  print or die “-p destination: $!\n”;
  }

伍.肆 Keynote 课件突显

<br />

 

6 View Controller


我们地方的例证只是一个独立的文本,按着样的话,应该能够跟四个名字,甚至*匹配;

6.一 简单的设计格局介绍

  •  -i 大约是用来读取文件时展开备份操作。
  • -e 告诉Perl后边跟上perl语句

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
      方法来给程序员贰个采取程序伊始化界面包车型大巴机会。最初步时,也是只有那3个主意来起先化界面包车型大巴。
    • 如若以上三种格局都未有给 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.

 -p和-i可以合在1起-pi,-p
-e也足以何在1块儿,不过-i,-e不能合在一起写-ie,上面包车型客车言辞表示在富有前缀为testperlreplace的公文中替换test字符串为hello

6.3 View Controller Lifecycle

  perl -pi -e ‘s/test/hello/g’ testperlreplace* 

6.3 多个 View Controller

  • 弹出新视图的方法 presentViewController:animation:completion:

    • UIViewController 的 modalPresentationStyle
      是安装弹出控制器风格的属性。
    • UIViewController 的 modalTransitionStyle
      是设置弹出动画风格的习性。
  • iOS 八+ 之后新措施 showViewController:sender

  • 释放控制器 dismissViewControllerAnimated:completion:

  • 回传数据:把父控制器作为子控制器的代办,通过回调函数来传递数据。并且由父控制器来控制子控制器的放走,而不是子控制器自个儿调用
    dismissViewControllerAnimated:completion: 方法。

<br />

7 Storyboard


Storyboard 也是1个 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.一 应用运行

  • main – 运行程序

  • UIApplicationMain() – 运营应用代理

  • UIApplication – 运行音讯循环

  • 应用软件Delegate – 生成选取代理

  • 基于 Storyboard 或然代码创设的 ViewController 加载
    rootViewController

八.二 用户互动

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: 事件
      那是3个短命的火候,暗中认可是 5 秒内做到。不过足以由此
      beginBackgroundTask 方法能够获得大致 十 分钟的后台运营事件。
      比方还索要更长的风云,要求编制后台运转程序。详细查看文书档案。
  • 使用关闭

    • applicationWillTerminate: 事件
      倘使你的施用刚好被挂起未有多短期,然后就被关门了,就会收到到那一个事件。假诺你早已被吊起在后台了,那在闭馆的时候就不会接收这么些布告。
  • 利用复活

    • applicationWillEnterForeground: 事件
      运用即将重回前台的风云。

八.四 移动使用的特征。

挪动使用的应用会分外的零散,会在种种地方中来回切换。

<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:
      (1般数量传递会在此间开始展览。)
    • navigationController:didShowViewController:animated:

九.三 在代码中应用 NavigationController

并不推荐使用代码创造,毕竟用 Storyboard 就很有益了。
setViewControllers:animated: 比较有时机意义,能够让导航不用每回都从
rootViewController 开端。特别灵敏。

九.4 自定义导航栏

摸底以下顺序类的性子,并根据实际须求自定义。
苹果有提供 Customizing
UINavigationBar

的代码示例,里面有充足多彩的自定义方法。

  • UINavigationBar
  • UIBarItem
    • UIBarButtonItem
  • UIToolBar

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

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

本贴意在作为对极客班 《iOS
开发实战》第肆期期课程录像重新学习的笔记。
目的是确立三个相比较完好的 iOS 开发知识点框架以及高速手册。
对壹1内容的事无巨细研商会开启新贴浓密商讨。
该贴仍在不断完善中。

0 导论


0.一 技术扶助

0.一.1 苹果技术帮忙

0.一.二 别的技术支持

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

0.二 学习格局

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 创制新工程

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

一.2 选用工程模板

能够挑选各种种种的工程模板,包蕴 iOS, OS X, watchOS, tvOS 1般选用 iOS
-> Single View Application。

壹.3 工程信息

  • Project Name:产品名称
  • Organization Name:组织名称
  • Organization Identifier:新产品唯一名,一般把商户域名反过来写。
  • Language:运转语言
  • Devices:运转设备(通用,金立,苹果平板)
  • 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…

壹.八 真机调节和测试

  • 丰硕调节和测试账号
    Xcode -> Preferences -> Accounts -> +
  • 安装调节和测试账号
    Workspace -> General -> Identity -> Team 举办分选 -> Fix
    issues
  • 运行
    第二次运维会提示错误,供给真机验证
    真机 -> 设置 -> 通用 -> 描述文件 -> 选中国国投任 -> 回到
    Xcode 再一次运维

1.玖 App 基本概念

  • iOS App 代码结构(那是 Objective-c 语言,斯威夫特 有所分裂,main
    文件会被埋伏)

    • main()
    • UIApplicationMain()(生成2个 UIApplication
      对象并安装成为该利用的代办。)
    • UIApplication 对象
    • UIApplicationDelegate
  • iOS App 运维环境
    • Sandbox
    • 获取目录 NSHomeDirectory()
  • iOS 应用都以3个 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 实际上是调用了3个按名字绑定的性质。
      [owner setValue:uiObj forKey:outlet.property]

其实自个儿要好都看不懂那段在说怎样……大概是说 outlet connection
其实是标注了界面与代码之间的关系,然后在程序运维的时候,会因而1层层
runtime
方法调用那种涉及,并基于界面模板实例化界面组件,从而生成组件绘制吧。

  • Action Connection

    • 界面事件接2连三 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 介绍

    模板会暗中同意生成3个 Assert Catalog 文件同时个中有 Appicon 以用于给
    App 提供系统图标。
    直接用图形名字的章程加载图片,就算省事,可是出于那样的做法会把图片缓存在内部存款和储蓄器中,在图纸较多尺寸较大时会照成内存压力。

  • Assert Catalog 功能

    • 添加图片:直接将图片能源拖入 Asset Catalog,可能上边包车型大巴 + 号。

    • 能源属性:各样图片可以有多个尺码以提须要分歧的荧屏尺寸使用。还足以设置适用各个装备和各类特定尺寸
      Attributes -> Devices。

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

  • 适用矢量图片

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

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

<br />

5 第一个 App


五.1 供给分析

  • 详见驾驭应用须求,须要得体通晓用户想要的是怎么。
  • 详细安插利用的逻辑流程,各样模块作用的原由和去向。

五.二 程序设计

平衡设计原则:设计程序时为现在大概的供给做好准备。不过这种形式有好有坏,有时候思索太多,就会促成当前事情难以完毕。假使完全只思索当下,就大概扩大将来重构的次数。中间的度必要靠程序员把握。

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

5.三 示例代码结构

逐一代码模块之间的关联和关联的显眼。

5.4 Keynote 课件展现

<br />

6 View Controller


陆.壹 不难的设计方式介绍

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
      方法来给程序员1个利用程序初叶化界面的火候。最开头时,也是唯有这1个措施来初叶化界面包车型大巴。
    • 如果以上二种方法都尚未给 appDelegate.window.rootViewController
      赋值,则那一个应用的 window 就会为 nil 展现黑屏.
  • 获取 ViewController 的 View

    • 自定义 ViewController 装载进度
      • 调用 [UIViewController loadView]
        假设有得以实现,调用之后就不会调用前面包车型地铁法门了。假若是暗许完结则会调用上边包车型大巴其它艺术。
      • 调用 [UIViewController nibName] 假诺是暗许模板,则 nibName
        应该是发源 Storyboard。假如是代码调用 initWithNibName
        则由程序员内定 nib. 固然两者都不是,则会调用下边包车型地铁点子。
      • [UIViewController exisitingNibNameMatchingClassName:bundle:],它会基于
        ViewController 方法估计并且查找
        Nib,尽管都查找不到,系统会创设3个空白视图。
    • 要点
      • 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 组件1样能够拖动到
      Canvas 上。并且能够设置它指向的 Storyboard 文件,Reference
      ID(即使不点名正是 initial View Controller)。
    • 当选要求停放在新 Storyboard 上的 ViewController,然后点击 艾德itor
      -> Refactor to Storyboard。然后就会创造新的 Storyboard
      文件,并将入选的 ViewController 放置到当中。
  • 获得其余 Storyboard

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

<br />

8 App Lifecycle


八.1 应用运行

  • main – 运营程序

  • UIApplicationMain() – 运行应用代理

  • UIApplication – 运行音信循环

  • 应用软件Delegate – 生成采纳代理

  • 依据 Storyboard 大概代码创立的 ViewController 加载
    rootViewController

八.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 方法能够取得大致 十 分钟的后台运维事件。
      假若还亟需更长的轩然大波,要求编写制定后台运营程序。详细查看文档。
  • 选拔关闭

    • applicationWillTerminate: 事件
      比方您的选拔刚好被挂起未有多短时间,然后就被关闭了,就会吸收到这么些事件。要是您曾经被吊起在后台了,那在关闭的时候就不会收下这么些通告。
  • 应用复活

    • applicationWillEnterForeground: 事件
      利用即将重回前台的轩然大波。

8.肆 移动应用的风味。

挪动使用的使用会分外的零碎,会在各类气象中来回切换。

<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:
      (1般数量传递会在那里展开。)
    • navigationController:didShowViewController:animated:

九.3 在代码中使用 NavigationController

并不引进应用代码创制,终归用 Storyboard 就很有益了。
setViewControllers:animated: 比较有机遇意义,能够让导航不用每便都从
rootViewController 起先。特别灵敏。

9.四 自定义导航栏

刺探以下依次类的性质,并基于实际须要自定义。基本上都是 Storyboard
中的操作,太简单严酷了十分的小概言语讲述。
苹果有提供 Customizing
UINavigationBar

的代码示例,里面有充分多彩的自定义方法。

  • UINavigationBar
  • UIBarItem
    • UIBarButtonItem
  • UIToolBar

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

<br />

10 TabBarController


10.1 UITabBarController 的结构

Tab Bar Item 1般不超过八个,否则会被埋伏。

  • tabBar

    • UITabBarItem
    • .moreNavigationController
  • viewControllers

    • customizableViewControllers
  • selectedViewController

  • delegate

    • UITabBarControllerDelegate

10.2 UITabBarItem

质量对应样式。

拾.三 在代码中动用 UITabBarController

记住在装置之时要设置好 ViewController 的 tabBarItem 属性。

10.4 自定义 TabBar

图标的施用请严刻根据系统定义来用,不然会让用户混乱。

  • 简单定制

  • 中档按钮

    停放 伍 个页面。然后利用3个新的视图覆盖中等的不行按钮。

    @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
是司空眼惯支付使用最频仍的零件之1。由于自家事先曾经做过无数应用,所以听课的时候很多比较简单的东西就一贯不展开记录了。提议照旧要多做多少个Demo 举办演习,并且多看文书档案。熟练 UITableViewDataSource 以及
UITableViewDelegate 的各样艺术。
若是供给高度定制,还索要驾驭一下 UIScrollViewDelegate
的方法,UITableViewDelegate
协议也继承自它,所以它的法门也同样有用,那样可以让你的 TableView
越发灵活本性。

  • 认识 UITableView

  • 3个 TableView 要求的功能。

  • iOS 中的 UITableView 结构

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

11.一 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 />

参考资料


知乎:品雪