iOS14开发-入门知识

iOS开发介绍

iOS 是由苹果公司开发的移动操作系统 。苹果公司最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统(最初叫 iPhone runs OS X)。该系统最初是设计给 iPhone 使用的(所以后来曾命名为 iPhone OS),之后陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上(所以在 WWDC 2010 上最终宣布更名为 iOS)。

iOS发展历史

2007-2020 每年发布一个新版本,最新版本 iOS 14。

Apple官网与开发者网站

开发硬件

  • 苹果电脑: iMac 或者 MacBook 或 Mac mini 主机连接一个显示器。
  • 还可以在普通电脑上装一个黑苹果系统(不推荐),安装复杂且不稳定。

开发软件

iOS 使用 Xcode 工具进行开发。可以在 App Store 搜索安装,也可以去 Apple 开发者网站下载安装(本教程基于 Xcode 12)。

开发语言

Swift 或者 Objective-C(本教程基于 Swift 5.x)。

创建第一个iOS项目

创建第一个iOS项目.png

项目文件

项目文件.png

App设置

  • 应用名
    • 项目 —> Target —> General —> Display Name
  • 应用图标
应用图标.png
  • 启动屏 LaunchScreen
    • 启动屏影响分辨率,可通过 LaunchScreen 删除验证。

模拟器

模拟器.png

App初始化流程

AppDelegate

  • 程序入口@main(iOS 14 以前是 @UIApplicationMain)。
  • didFinishLaunchingWithOptions启动方法。
  • 委托给SceneDelegate

SceneDelegate

  • window
  • 生命周期
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }

    func sceneDidDisconnect(_ scene: UIScene) {
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
    }

    func sceneWillResignActive(_ scene: UIScene) {
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
    }
}

UIView与UIViewController

初步印象

iOS 开发中,一个界面就是一个 UIViewController(视图控制器),界面上显示的内容就是 UIView(视图)。

UIView与UIViewController的关系

UIViewController 中默认有一个和屏幕一样大的 UIView,UIViewController 管理着它的生命周期。所有放在界面上的 UI 控件都放在 UIViewController 的 UIView 之上,在 UIViewController 的代码中可以通过self.view属性获取它。开发中的其他 UIView(及其子类)都放在该view上。

UIViewController中UIView的生命周期函数

  • viewDidLoad:View 完成内存加载。
  • viewWillAppear:View 即将显示。
  • viewDidAppear:View 完全显示。
  • viewWillDisappear:View 即将消失。
  • viewDidDisappear:View 彻底消失。

UIView

iOS坐标系

坐标系.png

UIView的容器概念

  • UIView 中可以放其他的 UIView。
  • UIView 的层次关系(平级与包含)。

UIView常见属性

  • backgroudColor:背景色。
  • frame:相对父视图的坐标和大小。
  • bounds:相对自身的坐标和大小,所以 bounds 的 x 和 y 永远为0。
  • center:相对父视图的中心点坐标。
  • alpha:透明度(0.0 ~ 1.0)。
  • tag:标记(Int 类型,默认等于0),设置后,可以通过所在容器View.viewWithTag方法拿到这个视图。
  • title:标题。
  • superview:父视图。
  • subviews:所有子视图。

UIView常见方法

  • addSubview:添加视图到父视图。
  • removeFromSuperview:将视图从父视图中移除(需提前讲解触摸方法)。
  • viewWithTag:根据 tag 值获取视图。
  • insertSubview:在指定视图的上/下面插入视图。
  • bringSubviewToFront:把视图移到最顶层。
  • exchangeSubviewAtIndex:将2个位置的视图互换。

@IBOutlet与@IBAction

引入

如何在代码中获取 Storyboard 中的自定义 UIView?目前有两种方式:

  • 通过 tag 属性:一旦视图多了,或者忘了设置 tag,亦或者设置了相同的 tag,都会出现问题。
  • 通过 subviews 属性:一旦视图多了很难通过数组准确获取某个 View。

有没有更加友好、更加直观、更加便捷、更加高效的方法呢?答案是肯定的,那就是 @IBOutlet 与 @IBAction

@IBOutlet

  • 写于类中的属性
  • 与 Storyboard 中的 UIView 建立联系。
  • 此时的属性就代表 Storyboard 中的 UIView
  • 所有的 UI 控件都可以拖拽 @IBOutlet。

@IBAction

  • 写于类中的方法
  • 与 Storyboard 中的 UIView 产生的事件建立联系。
  • 当相应的事件发生时,方法就会被调用。
  • 只有继承自 UIControl 的 UI 控件可以拖拽 @IBAction。

连线的前提

Storyboard 中的 UIViewController 与想拖拽的类进行了关联。

经典的连线错误

  • UIView 连线后删除了类中的 @IBOutlet 或者 @IBAction。
  • UIView 连线后改变类中的 @IBOutlet 或者 @IBAction 名字。
  • 错误信息
  1. @IBAction:unrecognized selector sent to instance
  2. @IBOutlet:this class is not key value coding-compliant for the key XXX
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345