You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Auto Resizing Masks, 这是一个比较老的技术,现在基本已经被Auto Layout所取代。我没有深入研究过,如果你有兴趣可以自行搜索相关资料。
Auto Layout,这种方式是需要我们指定一系列的"Constraints(约束)"给组件,然后系统会有一个引擎通过这些约束来推算出各个组件的位置和大小。这是现在最推荐的布局方式,如果你觉得系统的API调用起来太繁琐,也有很多第三方的语法糖library可用,我一般用https://github.com/SnapKit/SnapKit 。 但它们最终还是通过Auto Layout来实现布局的。
我学习iOS开发有半年左右的时间了,之前也断断续续尝试过,但真正入门大概是最近半年的事了。这几个月里业余时间做了几个小的App,功能比较简单,也都上架了。
我最开始是做后端开发,做了有六七年的时间之后,才开始接触网页前端开发。所以在学习iOS开发之前,我的大部分编程经验都集中于后端开发和Web前端开发。这篇文章之所以命名为"前端程序员如何入门iOS开发",是因为我觉得如果你先学的Web前端再去学iOS开发,会有一些思维习惯很难适应,这也是我认为作为Web前端入门iOS最难的部分。所以这篇文章就来分享一下我作为一个从前端"转行"来学iOS的一些心路历程。不过先声明一下,我也是作为一个初学者,所以如果文章内容如果出现错误,欢迎指正~
2023年了,为什么要学习iOS开发
开始学iOS之后,我才感觉到做前端开发的“幸福”。
首先,学习资料及其丰富。不管是公众号还是YouTube视频,我觉得前端类的教程大概占据了编程类资料的半壁江山,基本上你想学习一项技术,是不愁没资料可查的。
但是iOS给我的感觉是资料并没有那么丰富,再加上底层技术不像Web端那样全部是开源的,所以有时候碰到问题找不到资料,也无法通过查看源码来理解和解决的时候真的很头疼。
总体来说,我觉得iOS开发入门是要比Web开发难的。
另外,从找工作的角度来说,现在(2023年)学习iOS开发的"性价比"也不高。现在纯粹做Native iOS开发的机会已经不多了,小程序侵蚀了不少Native开发的市场。所以从功利的角度,我觉得学习iOS开发还不如做小程序更有钱景(只说中国的情况)。
但为什么还有学习iOS呢?
我个人来讲,主要是出于兴趣。因为自己平时用的电子产品都是Apple的,所以学了iOS可以自己做一些小的App来解决自己的一些问题。
另外,如果你有做独立开发的想法的话,我觉得做iOS App依然是很好的一个选择。
还有,有了iOS开发的基础,可以进一步接触到苹果生态更多的开发机会,比如Vision Pro。总之苹果作为市值第一的科技公司,我觉得苹果生态的机会还是很多的。
关于iOS开发的技术栈
首先,说一下iOS开发需要用到的技术栈。
语言主要包括
Swift
和Objective-C
,如果你现在开始学,我建议你从Swift
开始就可以。它的语法更现代,而且初学的话基本完全使用Swift就可以完成绝大部分需求了。不过Objective-C
我觉得也是有必要了解的,因为有些特性还必须使用到Objective-C,以及现在还有一些第三方库是使用Objective-C写的。另外,就是iOS开发的两种主要的框架:
UIKit
和SwiftUI
。它们主要决定你的UI布局方式。UIKit是一种比较老的框架,从iOS诞生之初就是使用UIKit。SwiftUI是一种新的构建UI的框架,诞生于2019年。UIKit只能用于iOS开发(macOS上有和它类似的AppKit),而SwiftUI是跨平台的,同一套代码可以用于iOS/macOS/tvOS等。这里说一下,虽然UIKit已经比较老了,但是并不意味着SwiftUI的出现会直接替代UIKit,我觉得它们至少在相当长的一段时间会是共同存在的关系,现在每年的WWDC苹果依然在更新UIKit的API。SwiftUI现在依然有挺多问题是解决不了的,这时候需要借助于UIKit来实现。不过SwiftUI和UIKit之间的互操作还是挺方便的,所以你完全可以一个项目中同时使用UIKit和SwiftUI来写。
我最开始学的是UIKit,写项目也大部分是用UIKit,所以这篇文章中主要讨论UIKit。
开发工具
首先,硬件部分需要准备一台Mac。手机的话,前期是不太需要的,可以用模拟器来测试。不过有些特性用模拟器是测试不了的,比如摄像头等。所以还是建议准备一台iPhone。
软件需要下载Xcode,然后在https://developer.apple.com/申请一个开发者账号,真机调试的话是需要登录开发者账号才行的。99刀的开发者会员可以先不买,如果有一天你需要把你的App上架到App Store再付费也可以。
UI布局的两种方式
有了以上准备,就可以打开Xcode创建第一个项目了。具体的操作你可以自行搜索其他资料,这篇文章主要讲一些宏观理论层面的东西,所以不会涉及太多细节操作。这里首先说一下UI布局的两种方式:
Main.storyboard
,右侧将会出现一个UI编辑区,我们可以点击右上角的加号按钮(+)来打开一个组件库,然后就可以拖动需要用到的组件到我们的App上。点击一个UI组件,在最右侧可以查看和修改它的属性。不同的UI组件类型有不同的属性,比如Label可以修改它的字体大小和颜色、对齐方式等。还有布局的Constraints(约束)也是在右侧界面里设置。右键->Open As->Source Code
来查看。我最开始学的时候选择的代码布局的方式,因为潜意识里觉得这样更容易接触到更底层的逻辑,这样学习会比拖界面的方式理解的更深。事实也的确如此,不过我建议你从Storyboard开始学也是挺好的,因为大部分的教程其实都是基于Storyboard的,纯代码布局的教程反而比较少。当然后期的话最好还是两种方式都掌握,我现在做个人项目一般是用Storyboard拖界面,然后在代码里实现逻辑。Storyboard比较适合个人开发者,如果是团队协作开发的话,用Storyboard比较难解决代码冲突,以及项目如果太大以及UI太复杂的话感觉也不如代码的方式容易管理。
总之,Storyboard比较适合于个人开发者以及UI比较少比较简单的项目,代码布局比较适合于团队协作以及UI比较多比较复杂的项目。我们最好两种都掌握,建议从Storyboard开始入手学习。
UI布局的几个难点
位置和大小需要我们自己关心
UI布局我觉得最主要的其实就是决定一个组件的
位置
和大小
。由于我开始学是直接使用的代码布局的方式,当时在代码里创建并添加一个组件到界面上,但是这个组件死活就是不出现。后来才发现,我们必须手动给它指定一个位置和大小,否则它的位置和大小都是0,自然不会出现。而在Web开发中,其实我们更多的是在调整各个组件之间的"相对"位置和大小,就算我们什么都不做,至少你的各个组件依然会按照从上大下的顺序一一显示出来。这也是我觉得比较难适应的一个点,就是Web的UI引擎其实帮我们做了不少布局方面的工作,我们只需要做一些"微调"就可以了。而iOS上大部分都需要我们手动来操作,系统帮我们做的东西较少。UI布局的主要API
在iOS上布局UI,主要会用到以下几种方式:
frame
属性,这就相当于完全手动的指定一个固定的坐标,它的缺点是需要我们手动计算坐标和大小的数值,然后也无法自适应界面的不同变化,比如不同尺寸的设备以及设备的旋转。总结,在做布局的时候,优先考虑UIStackView,如果解决不了的就用Auto Layout,直接设置frame的方式除非是做测试,否则尽量可以避免。
系统的其他Framework
Apple把不同的系统功能集合归类到不同的"Framework"中,比如上边提到的UIKit和SwiftUI就是两个不同的Framework, Apple还提供了其他很多不同的Framework,用来解决不同的问题。可以通过这个链接查看:https://developer.apple.com/documentation/technologies 。在官网上,它们被称为“Technologies",每个其实都对应到Swift语言中的一个"Framework",也就是我们需要用
import
语句来引用,然后才能调用里面的API。比如要访问用户的相册,就需要用到PhotoKit
等等。学习资源
首先建议先熟悉一下Apple Developer官网,知道它的内容组织方式,大概浏览一下它都提供了哪些方面的内容。除了 https://developer.apple.com/develop/ 这个网站之外,其实还有挺多更有价值的内容是在它的"Archive"页面里。比如关于View: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009503 。这些页面虽然看起来比较老旧,但是内容是非常有价值的,它主要提供一些宏观理论层面的讲解,而官网更多的是一种API的罗列(类似于reference)。
除了官网,我也看了一些YouTube视频,比如https://www.youtube.com/@LetsBuildThatApp ,他会在视频中复刻一些知名的App,比如Facebook等。还有些推荐斯坦福大学的一个教程 https://www.youtube.com/watch?v=TZL5AmwuwlA ,这个我也基本看完了,不过它的内容比较长,我觉得可能比较适合有点基础之后再去看。初期我建议从LetsBuildthatApp那个Youtube Channel开始会比较轻松。
总结
这篇文章主要分享了一些我个人学习iOS的心得,算是泛泛而谈,没有过多深入到技术细节中。如果大家感兴趣,欢迎给我留言,我会更新更多iOS学习的相关分享。
The text was updated successfully, but these errors were encountered: