[纯代码] Swift+UIKit · 搭建第一个iOS APP项目
本文目录
- 前言
- 创建一个纯代码编辑的Swift + UIKit项目
- 创建一个Swift + UIKit项目
- 让它变成纯代码编辑的
- 让你的APP打开指定的ViewController
- 创建一个窗口
- 编辑ViewController文件,看下它是否真的被打开了?
前言
校招入职公司一年多了,现在也总算是告别了什么都不会的新手期,处理日常工作时也不至于面对需求无计可施。但是我总感觉,作为一个初涉iOS的工程师而言,多去造造轮子,做做项目,对自己的提升应该也会更快。这个过程里,我也可以更快熟悉苹果生态,将自己的身份从一名iOS开发新手,转变为iOS开发者。(虽然公司的基建很赞,让我不用操心这些东西,但是一直依赖下去可也不是什么好事= =)
在这半年内,我会开始根据100Day Swift列出的一系列项目,去重新做一遍,并且将遇到的各个基础知识整理到博客中,方便以后查阅和使用。也欢迎各位同行指出不足,一起进步。
- 本文适合的读者:
- 有过客户端开发经历,了解客户端常用架构(MVC/MVP/MVVM)
- 熟悉Swift语法,或已完成了Swift的学习
- 想了解iOS的开发流程
- 本文涉及到的项目:
Project 1 - Tap Counter
- 本文的主题:如何使用纯代码方式创建一个Swift + UIKit项目
- 环境相关:
- 开发环境:macOS 12.4 + XCode 13.4.1
- iOS target:15.0
- Swift 版本:Swift 5.3
创建一个纯代码编辑的Swift + UIKit项目
创建一个Swift + UIKit项目
打开Xcode,右上角File → New → Project
。
在弹出来的Xcode弹窗里,点击一下iOS
这个tab下的App
,然后点击Next
。
在弹出来的界面中,需要填以下的信息:
Product Name
:APP名Organization Identifier
:APP属于什么企业,标识符是什么interface
:UI框架,选择Storyboard
,这一项对应着UIKitLanguage
:编程语言,选择Swift
选择项目的存储路径,然后恭喜你,你已经成功创建了这个项目啦。
让它变成纯代码编辑的
接下来,你将会删除掉项目对StoryBoard的引用。StoryBoard的本质很像Android、QT、UWP开发中的可视化界面,你可以在里面用xml/xaml
语法快乐的拖动UI,并且所示即所得。
但是iOS工程界目前对这个方案还是不太喜欢的,业界更倾向的方式是:手撕UI,并且手撕布局。在这一节中,我会列出实现的方案。
首先,点击左侧列表中,你创建的项目。
然后在右方展示的general
这个tab中,删除Main interface
里的内容。
然后,点击左侧中的info
文件,像我这样展开目录树。
然后点击最下方的storyboard name
,敲一下backspace,删掉。
恭喜你,现在你获得了一个丢弃掉StoryBoard的项目了。接下来,我会教你怎么让你的APP打开第一个页面。
让你的APP打开指定的ViewController
我们以客户端常见的架构,MVC(Model、View、Controller)
为例。纯代码的iOS开发会有稍许不一样,视图控制器(ViewController
)往往需要承担视图+控制器的责任。
本小节,我会讲述如何让APP打开项目中已经创建好了的ViewController。
创建一个窗口
iOS的APP以窗口(Window
)来显示页面。在跳转到ViewController之前,你需要创建这个APP的Window,然后将这个window的第一个视图控制器,设置为项目中的ViewController。
首先,打开SceneDelegate
文件,然后删掉func scene(_:willConnectTo:options:)
中的代码,用下面的代码粘贴上去。
class SceneDelegate: UIResponder, UIWindowSceneDelegate {var window: UIWindow?func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {guard let windowScene = scene as? UIWindowScene else { return }// Step 1. 创建let window = UIWindow(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))// Step 2. 设置背景色window.backgroundColor = .clear// Step 3. 设置第一个ViewControllerwindow.rootViewController = ViewController()// Step 4. 让它可见,并且做好事件监听window.makeKeyAndVisible()window.windowScene = windowScene// Step 5. 告诉APP,这就是你的windowself.window = window}
}
这段代码中,我们创建好了一个window变量,并且传给APP:
这个window是全屏的:它的大小等于屏幕的大小,位置从(0, 0)开始
这个window没有背景色
我们创建了一个ViewController变量,并且将它设为这个window的第一个ViewController
接下来,我们让这个window可见,并且做了一定的事件监听,这部分可以忽略
编辑ViewController文件,看下它是否真的被打开了?
然后,打开ViewController
文件,用下面的代码粘贴上去。
和原来的代码比起来,这段代码里我们只做了一件事:我们希望打开的第一个页面是棕色的。
class ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor = .systemBrown}
}
运行一下试试?然后你会看到你的模拟器打开了这么一个APP。
恭喜你,你的ViewController页面已经被打开了。
[纯代码] Swift+UIKit · 搭建第一个iOS APP项目相关推荐
- 视频教程-从零开发一个iOS企业级项目实战之我的云音乐视频 教程-iOS
从零开发一个iOS企业级项目实战之我的云音乐视频 教程 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生苦短,我们只做好课!熟 ...
- 如何用 React Native 创建一个iOS APP?(二)
我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...
- 使用MVVM Swift UIKit RxSwift 写一个SpaceX 发射计划APP
文章: Build a simple SpaceX Launches iOS app with MVVM and RxSwift 源码 GitHub - ykpoh/SpaceXLaunch: A i ...
- 怎样做一个iOS App的启动分层引导动画
http://www.cocoachina.com/ios/20141211/10610.html 一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App ...
- 怎样做一个iOS App的启动分层引导动画?
一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷 ...
- Eclipse搭建第一个Spring boot项目
创建Spring boot项目之前,默认大家都已经下载好了Eclipse和Maven,并配置好了相关的环境. 一.下载STS插件 要创建Spring boot项目,首先得下载相应的插件,进入Eclip ...
- 介绍上架一个iOS APP需要多少钱
经常收到咨询说ios app上架App Store需要多少费用?一两句话解释不清,ios APP上架涉及到方方面面,这里介绍下iosios app上架App Store需要的基本费用.APP开发的费用 ...
- ios APP项目架构心得
iOS项目架构分为以下几步,这些都是总结的经验之谈 1.架构 1.架构这个概念很抽象,但是用一句话来说叫看菜吃饭,有些人喜欢先看UI在架构,有些人喜欢先把该有的东西有了再看UI,其实都可以-.. 2. ...
- 创建第一个Flutter App项目
上篇,我们讲了Flutter在Windows下开发环境的配置,并创建一个新的Flutter项目.这篇我们来讲,创建Flutter App项目. 看下我们最终实现的效果: 第1步: 创建 Flutter ...
最新文章
- 此选项卡已恢复的处理过程
- 成功解决TypeError: Scalar value for argument 'color' is not numeric
- 大数据?人工智能?揭秘银行数据仓库发展趋势
- 剑灵电五服务器位置,选对服务器很重要 剑灵新手选服攻略
- 计算机自动化专业强的二本大学,2020自动化专业大学排名公布
- linux系统下安装中文字体步骤
- 现代薄膜温室大棚五大优点,常用的经济作物都有哪些?
- 实战SOHO接单的全过程
- omap3530支持gpu模块
- instrument之Time Profiler总结
- Python求最大公倍数
- linux安装mysql出现Could NOT find Curses (missing CURSES_LIBRARY CURSES_INCLUDE_PATH),提示解决方法
- python中 [:],[::]的用法
- Arduino读取GPS模块
- #SORA#flask实验
- redis关闭后在连接报错误:Could not connect to Redis at 127.0.0.1:6379: Connection refused
- 举例说明层次分析的三大原则_《搞定》一个境界、两个维度、三大原则让你轻松搞定繁重的事务...
- android之DPAD上下左右四个键控制
- 一行代码解决约瑟夫问题(我要开始装B了)
- Linux指令-source