Swift开发——简单App设计

简介: SwiftUI教程概述:简化App设计,通过代码展示了如何创建一个计算两个数之和的界面。工程`MyCh0902`包含`ContentView.swift`,其中定义了`ContentView`和`MyView`结构体。`MyView`负责界面布局,使用`VStack`和`HStack`组织元素,如`TextField`和`Button`。点击`Button`调用`calc`方法处理输入并更新结果。界面设计可在Xcode的Inspector窗口中可视化配置。推荐将界面逻辑移到单独的`MyView.swift`文件中以清晰分离视图设计。

image.png


App的界面设计需要具有大量的图像并花费大量的时间,这样的应用不方便学习和交流,这里重点介绍SwiftUI界面元素的用法,通过简单App设计过程的讲解,展示图形用户界面应用程序的设计方法。



# 01、简单App设计



按照9.1节工程MyCh0901的创建方法,创建一个新的工程MyCh0902,此时工程管理器如图9-11所示。

image.png


■ 图9-11工程MyCh0902结构

在图9-11中,MyCh0902Tests和MyCh0902UITests下的文件是测试文件,PreviewContent下的文件为界面预览文件,这些文件不需要管理。Assets.xcassets为工程的资源管理文件,工程的图标、启动界面图像和各个界面元素的背景图像等均保存在其中。MyCh0902App.swift是程序启动入口文件;ContentView.swift文件是界面视图设计文件。

工程MyCh0902实现的界面功能如图9-12所示。

image.png


■ 图9-12工程MyCh0902实现的界面功能

在图9-12中,在Number One处输入一个数,在Number Two处输入另一个数,然后单击Compute按钮,将输入的两个数的和显示在Result处。

为了实现图9-12的功能,需要图9-11中的ContentView.swift文件,如程序段9-4所示。

程序段9-4文件ContentView.swift

image.png


image.png


在程序段9-4中,第3~10行为结构体ContentView,服从协议View,实现了View协议的计算属性body,body的类型为服从View协议的模糊类型。在body中有一个按列摆放界面元素的视图VStack,其中,第6行“MyView()”创建了一个MyView结构体实例。MyView结构体如第12~64行所示。

MyView结构体是自定义的结构体,其中完成了界面的设计和数据处理。

在MyView结构体内部,第14行“@State private var textOne:String=" "”定义私有属性textOne,“@State”表示该属性不需要使用mutating方法就可以读写。第15行“@State private var textTwo:String=" "”定义私有属性textTwo。第16行“@State private var textRes:String=" "”定义私有属性textRes。上述三个属性均为字符串类型,用作TextField和Text控件的显示文本。

第17~51行为计算属性body,其中放置了一个VStack视图(第19~50行),VStack视图是一个容器,将其中的控件按列排放,其摆放了三个HStack视图,HStack视图将其中的控件摆放在一行:①第一个HStack视图中放置了一个Text控件和一个TextField控件,如第22~26行所示。其中,Text控件显示蓝色的文本“Number One:”(第22~23行),TextField控件是文本编辑框,标签为Number One,显示的文本为textOne,文本颜色为绿色,控件带有边框(第24~25行)。②第二个HStack视图中放置了一个Text控件和一个TextField控件,如第27~32行所示。其中,Text控件显示蓝色的文本“Number Two:”(第28~29行),TextField控件是文本编辑框,标签为Number Two,显示的文本为textTwo,文本颜色为绿色,控件带有边框(第30~31行)。③第三个HStack视图中放置了两个Text控件、一个Spacer控件(用于分隔两个控件的空格控件)和一个命令按钮Button控件(第34~48行)。其中,第一个Text控件显示橙色的“Result:”文本,宽度为60,左对齐,如第34~36所示;第二个Text控件显示紫色的文本txtRes,宽度为140,高度为30,右对齐,边框为蓝色,如第37~40行所示;Button按钮显示红色的字号为20的文本Compute,带边框,背景色是透明度为0.1的橙色,宽度为150,控件右对齐,单击Button控件将调用calc方法,如第42~47行所示。

第50行“.frame(minWidth:0, maxWidth:.infinity, minHeight:0, maxHeight:.infinity, alignment:.topLeading)”设置VStack视图占据它所在的主视图(即第5行的VStack视图),且其中的控件摆放顺序为从顶至底。

第52~63行为calc方法,当单击Button控件时将调用该方法。第54行“let one=String(textOne.filter {![" ", "\t", "\n"].contains($0)})”去掉textOne字符串中的空格、Tab键和回车符,赋给one;第55行“let two=String(textTwo.filter {![" ", "\t", "\n"].contains($0)})”去除textTwo字符串中的空格、Tab键和回车符,赋给two。第56~62行为两层嵌套的if结构,使用了可选绑定技术,将one转换为Double型,赋给a(第56行);将two转换为Double型,赋给b(第58行);第60行“textRes=String(format:"%.2f", a+b)”将a与b的和转换为字符串赋给textRes,显示在第37行所示的Text控件中。

在进行SwiftUI程序设计时,有以下几点注意事项。

(1) 每个控件都有一些属性,设置这些属性使用类似于“.foregroundColor(Color.blue)”的方法,但在实际编程时,可以直接借助Inspector窗口可视化地设置,Inspector窗口位于Xcode开发界面的最右侧。例如,当单击程序段9-4的第22行时,Inspector窗口的显示内容如图9-13所示。当单击不同的界面元素时,Inspector窗口将显示该界面元素对应的属性(称为Modifiers),Inspector称为属性设置器。

image.png


■ 图9-13Text控件的Inspector窗口

由图9-13可知,Text控件相关的显示属性均列在Inspector窗口中了。例如,在图9-13中,在Font一栏中的Weight项(旁的下拉列表框)中选择Bold(图9-13中为Inherited,表示使用其父类的字体样式),则在第22行和第23行之间,自动添加“.fontWeight(.bold)”。每个控件的属性显示和代码中输入的属性有对应关系。在实际程序设计时,一般会先在程序代码中列出界面元素的名称和属性,然后再借助界面元素的Inspector窗口进行可视化配置。

(2) 通过工程MyCh0901和MyCh0902可知,工程中“工程名App.swift”样式的程序文件的内容不需要改动,但是文件名可以重新命名。例如,在工程MyCh0902中,MyCh0902App.swift文件的内容不需要改动,但是文件名可以重新命名为MyApp.swift。

(3) 通过工程MyCh0901和MyCh0902可知,工程中ContentView.swift文件是界面设计文件,一种更通用的做法是在工程中新建一个文件,命名为MyView.swift(文件名随意选取,与其中的结构体名没有关系)。针对工程MyCh0902,添加的MyView.swift工程管理器如图9-14所示。

image.png

■ 图9-14新工程MyCh0902的工程管理器


在图9-14中,添加了新的程序文件MyView.swift,将程序文件ContentView.swift中的结构体MyView移动到文件MyView.swift中,并在MyView.swift头部添加import SwiftUI。这样界面设计的全部工作都由MyView.swift完成。如果把ContentView.swift文件中的ContentView_Previews结构体也移动到文件MyView.swift中,则编辑MyView.swift程序时可以看到预览界面。这样处理后的ContentView.swift的代码如程序段9-4的第1~10行所示,后续工作无须改动这些代码; 或者,将这些代码修改为如下形式:

image.png


这样,在ContentView结构体的计算属性body中可以直接创建结构体MyView的实例,实现界面的显示。

(4) Swift语言是Apple推出的替换Object-C的程序设计语言,SwiftUI也是Apple主推的界面设计方法,它与经典的StoryBoard方法各有特色,Apple建议使用SwiftUI,SwiftUI的界面元素属性和方法处理更具人性化。但是,优秀的用户界面需要使用大量美观的图像,SwiftUI的大部分界面元素可以指定背景图像,有些甚至可以指定动画图像。

目录
相关文章
|
3天前
|
JSON 小程序 数据格式
uni-app 使用vscode开发uni-app
uni-app 使用vscode开发uni-app
9 0
|
3天前
|
JSON 前端开发 API
移动端---------app开发03----apicloud必须掌握的代码
移动端---------app开发03----apicloud必须掌握的代码
|
3天前
|
前端开发 开发者
移动端-------app开发02,了解apicloud功能和使用,真机测试
移动端-------app开发02,了解apicloud功能和使用,真机测试
|
5天前
4. 解决uni-app开发过程中view、image等标签出现诸如“出现错误:类型“{ class: string; }”的参数不能赋给类型“.......”
4. 解决uni-app开发过程中view、image等标签出现诸如“出现错误:类型“{ class: string; }”的参数不能赋给类型“.......”
9 0
|
5天前
|
JSON 数据格式
3. 使用 VsCode 开发 uni-app 项目需要使用到的插件
3. 使用 VsCode 开发 uni-app 项目需要使用到的插件
8 0
APP开发的流程有哪些?
APP开发的过程当中,多多少少的也要遵循着自己的流程,从现有的一些情况来看,大多数的情况下再开发的过程当中加入着各种不同的开发方案,那么他们的流程究竟如何?
184 0
|
测试技术 UED
app开发流程有哪些
  app开发流程是需求方和供求方相互协调的过程,一般分为需求分析、功能设计、功能实现、项目测试、上线等几个步骤,下面我们就来一起看看ytkah团队进行app开发各个流程主要做哪些事情,让您对app开发设计有一个更全面的了解,更放心地将项目交予我们来为您实施。
1275 0
|
14天前
|
编解码 Java Android开发
FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
RTMP Streamer是一款开源的安卓直播推流框架,支持RTMP、RTSP和SRT协议,适用于各种直播场景。它支持H264、H265、AV1视频编码和AAC、G711、OPUS音频编码。本文档介绍了如何使用Java版的RTMP Streamer,建议使用小海豚版本的Android Studio (Dolphin)。加载项目时,可添加国内仓库加速依赖下载。RTMP Streamer包含五个模块:app、encoder、rtmp、rtplibrary和rtsp。完成加载后,可以在手机上安装并运行APP,提供多种直播方式。开发者可以从《FFmpeg开发实战:从零基础到短视频上线》获取更多信息。
46 7
FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
|
27天前
|
移动开发 小程序 视频直播
FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题
本文讲述了在使用ZLMediaKit进行视频直播时,遇到移动端通过ExoPlayer和微信小程序播放HLS直播地址失败的问题。错误源于ZLMediaKit对HTTP地址的Cookie校验导致401无权限响应。通过修改ZLMediaKit源码,注释掉相关鉴权代码并重新编译安装,解决了此问题,使得ExoPlayer和小程序能成功播放HLS视频。详细解决方案及FFmpeg集成可参考《FFmpeg开发实战:从零基础到短视频上线》一书。
43 3
FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题
|
17天前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十七):【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
在uni-app中,使用axios实现网络请求和登录功能涉及以下几个关键步骤: 1. **安装axios和axios-auth-refresh**: 在项目的`package.json`中添加axios和axios-auth-refresh依赖,可以通过HBuilderX的终端窗口运行`yarn add axios axios-auth-refresh`命令来安装。 2. **配置自定义常量**: 创建`project.config.js`文件,配置全局常量,如API基础URL、TenantId、APP_CLIENT_ID和APP_CLIENT_SECRET等。