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

目录
相关文章
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
8天前
|
安全 JavaScript 前端开发
小游戏源码开发之可跨app软件对接是如何设计和开发的
小游戏开发团队常需应对跨平台需求,为此设计了成熟的解决方案。流程涵盖游戏设计、技术选型、接口设计等。首先明确游戏功能与特性,选择合适的技术架构和引擎(如Unity或Cocos2d-x)。接着设计通用接口,确保与不同App的无缝对接,并制定接口规范。开发过程中实现游戏逻辑和界面,完成登录、分享及数据对接功能。最后进行测试优化,确保兼容性和性能,发布后持续维护更新。
|
10天前
|
前端开发 Java 测试技术
语音app系统软件源码开发搭建新手启蒙篇
在移动互联网时代,语音App已成为生活和工作的重要工具。本文为新手开发者提供语音App系统软件源码开发的启蒙指南,涵盖需求分析、技术选型、界面设计、编码实现、测试部署等关键环节。通过明确需求、选择合适的技术框架、优化用户体验、严格测试及持续维护更新,帮助开发者掌握开发流程,快速搭建功能完善的语音App。
|
11天前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
884 14
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
11天前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
141 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
12天前
|
供应链 数据挖掘 API
1688APP 原数据 API 接口的开发、应用与收益
1688作为阿里巴巴旗下的B2B平台,汇聚海量供应商和商品资源。其APP原数据API接口为开发者提供获取商品详细信息的强大工具,涵盖商品标题、价格、图片等。通过注册开放平台账号、申请API权限并调用接口,开发者可构建比价工具、供应链管理及自动化上架工具等应用,提升用户体验与运营效率,创造新的商业模式。示例代码展示了如何使用Python调用API并解析返回结果。
68 8
|
14天前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
37 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Swift
Swift开发笔记4.协议Protocal
Swift中的协议就是我们通常所说的接口,它连接了软件和软件模块,非常重要。首先定义一个协议: protocol CgProtocol { } 协议也有基协议: protocol CgProtocol : NSObjectProtocol { } 协议是可以多继承的。
775 0
|
3月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
72 2
|
3月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
96 1

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
  • 2
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 4
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
  • 5
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 6
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 7
    【Azure Function】Function App出现System.IO.FileNotFoundException异常
  • 8
    【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknown column 'created_at' in 'order clause'”
  • 9
    阿里云APP备案流程图以及备案所需材料整理,跟着教程一步步操作
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 4
    【Azure Function】Function App门户上的Test/Run返回错误:Failed to fetch
    31
  • 5
    陪玩APP推送配置:陪玩系统手机锁屏收不到推送?可能是这些原因!解决方案来了!
    34
  • 6
    小游戏源码开发之可跨app软件对接是如何设计和开发的
    33
  • 7
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
    135
  • 8
    PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
    60
  • 9
    语音app系统软件源码开发搭建新手启蒙篇
    44
  • 10
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
    884