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的大部分界面元素可以指定背景图像,有些甚至可以指定动画图像。

目录
相关文章
|
14天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
122 18
|
10天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
31 5
|
10天前
|
移动开发 安全 搜索推荐
圈子社交系统APP,同城本地圈子论坛开发,让身边的人沟通更加紧密
圈子社交系统APP是一款基于社交网络的移动应用,用户可创建、加入和管理兴趣圈子。主要功能包括:动态分享与交流、实时聊天、会员体系与身份认证、活动策划等。该APP注重个性化定制、社交关系深化、隐私安全及跨平台互联,提供丰富的社交体验。
|
13天前
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
19 1
|
21天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
80 11
|
19天前
|
前端开发 数据库 UED
uniapp开发,前后端分离的陪玩系统优势,陪玩app功能特点,线上聊天线下陪玩,只要4800
前后端分离的陪玩系统将前端(用户界面)和后端(服务器逻辑)分开开发,前者负责页面渲染与用户交互,后者处理数据并提供接口。该架构提高开发效率、优化用户体验、增强可扩展性和稳定性,降低维护成本,提升安全性。玩家可发布陪玩需求,陪玩人员发布服务信息,支持在线聊天、预约及线下陪玩功能,满足多样化需求。[演示链接](https://www.51duoke.cn/games/?id=7)
|
18天前
|
安全 算法 机器人
双重防护!红娘相亲app搭建开发,婚恋交友系统登录方式,密码+验证码的优势
在婚恋交友系统中,密码和验证码是两种重要的安全措施。密码用于验证用户身份,应设置为复杂组合以防止未经授权的访问;验证码则通过图形或字符识别,防止自动化攻击如暴力破解和注册机器人。两者同时开启可显著提高安全性,防止暴力破解和自动化注册,提升用户信任感。建议要求强密码、定期更新验证码样式,并在可疑登录时增加验证码复杂性。这样既能保障用户信息安全,又兼顾了用户体验。 ![交友11111.jpg](https://ucc.alicdn.com/pic/developer-ecology/hy2p6wcvgk4oe_c9eb8d6eb8144866b0cd1d96ffb0c907.jpg)
|
3月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
831 7
|
3月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
854 1
|
25天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
127 6