初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑(3)

简介: 初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑

实战编程-页面交互

在学习页面交互之前,我们先来了解下MVVM开发模式。MVVM开发模式,指的是Model-View-ViewModel模式,简单来说,就是将页面、数据、数据处理分开。

之前的章节内容我们完成的最多的是View的部分,Model数据部分在后面的章节中我们也经常提及,这里我们页面交互逻辑用的的逻辑部分,都属于ViewModel

在左侧视图工具栏中右键,选择New File,选择Swift文件,命名为ViewModel。键入以下的代码:

less

复制代码

import Foundation
import SwiftUI
class ViewModel: ObservableObject {
    @Published var isLogin: Bool = false
    @AppStorage("App_firstLaunch") var Apps_firstLaunch: Bool = true
}

image.png

引用SwiftUI后,我们创建了一个类ViewModel,遵循ObservableObject协议。这里声明了2个变量,一个是isLogin,判断是否登录。另一个是控制引导页,由于引导页是初始首次打开App时才展示,因此需要使用@AppStorage声明。

声明好必要的参数后,我们来到PageSettingsApp页面,这是整个App加载时展示的页面,也就是@main主函数页面。

首先引用创建好的ViewModel类,代码如下:

ini

复制代码

@StateObject var viewModel = ViewModel()

在主体代码部分,App加载的内容需要根据我们声明好的变量状态进行展示,当我们是第一次展示时,加载引导页GuidePageView,如果不是,则判断是否登录,若没有登录则展示登录页,登录后则展示主页,完整代码如下:

scss

复制代码

import SwiftUI
@main
struct PageSettingsApp: App {
    @StateObject var viewModel = ViewModel()
    var body: some Scene {
        WindowGroup {
            if viewModel.Apps_firstLaunch {
                GuidePageView().environmentObject(viewModel)
            } else {
                if viewModel.isLogin {
                    ContentView().environmentObject(viewModel)
                } else {
                    LoginView().environmentObject(viewModel)
                }
            }
         }
    }
}

image.png

完成后,相应地我们在引导页GuidePageView中也需要引用ViewModel类,代码如下:

css

复制代码

@EnvironmentObject var viewModel: ViewModel

声明好后,在引导页最后一页点击按钮操作时,更新Apps_firstLaunch状态为false,如下图所示:

image.png

同理,在LoginView页面中也需要做同样的操作,引入ViewModel类,将isLogin状态更新为true,如下图所示:

image.png

整体效果-预览

点击模拟器顶部的“运行”图标,尝试拖动页面,效果如下:

image.png

本章小结

本章涉及到的知识点有点多,如果有哪一块不太了解可以重复看一下实现细节。其实在过往的产品研发过程中,产品、设计、开发,本身就是一体化的工作,只是现在因为劳动分工导致的职业化罢了。

其中引导页、登录页为上两章节的内容,如果不太了解,可以先行学习上两章节内容再回到本章进行学习。

在本章中首次使用到了MVVM开发模式,相比较MVC模式,代码更加清晰简洁,更适合协同开发。当然对个人开发者来说,也更好地符合面向对象编程的方式,但具体使用什么开发方式,还是要根据不同开发环境和业务需求制定。

还是那句,说再多不如自己敲一遍,学习最好的方法便是吸收、转化、输出。下面的章节我们继续来学习和完成一个又一个项目,敬请期待吧~

相关文章
|
2月前
|
Web App开发 前端开发 异构计算
前端如何实现网页变灰功能?
前端如何实现网页变灰功能?
|
8月前
|
前端开发 开发工具 iOS开发
初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑(1)
初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑
188 0
|
16天前
|
编解码 前端开发 JavaScript
带您一步步构建一个基本的动态新闻网站,包括页面布局、样式设计以及交互效果的实现
【6月更文挑战第14天】构建动态新闻网站实战项目,涉及页面布局、样式设计和交互实现。首页采用顶部导航栏、轮播图和新闻列表布局;新闻列表页按分类显示新闻,详情页展示完整内容并可添加相关推荐和评论。设计注重色彩搭配、字体选择和布局间距,实现轮播图效果、导航栏交互和响应式设计,提升用户体验。该项目有助于锻炼HTML和CSS技能,理解网页设计实际应用。
53 1
|
2月前
|
PHP
【ripro美化】设计子主题sheji-child素材资源下载站模板(集成后台+无授权+独立运行)
安装教程 第一步:首先对应单个上传替换包里面的文件到ripro原主题里面(单个文件覆盖不是替换整个文件包) 第二步:将下载的sheji-child压缩包上传到/wp-content/themes/直接解压,完成后到后台-外观-启用子主题 后台新建页面 1:页面-新建页面-选择VIP介绍模板,链接填vip 2:页面-新建页面-选择自助申请友链模板,链接填links
19 0
【ripro美化】设计子主题sheji-child素材资源下载站模板(集成后台+无授权+独立运行)
|
8月前
|
前端开发 开发工具 iOS开发
初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑(2)
初识MVVM·关于启动页、引导页、登录页的设计细节和交互逻辑
41 0
|
8月前
|
小程序 前端开发 JavaScript
微信小程序框架--视图层、逻辑层与页面的生命周期
微信小程序框架--视图层、逻辑层与页面的生命周期
92 0
|
9月前
|
存储 小程序 前端开发
【易售小程序项目】小程序私聊页面完善(带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】
【易售小程序项目】小程序私聊页面完善(带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】
37 0
|
11月前
|
小程序 JavaScript
整理微信小程序控制view隐藏显示的五种方法
整理微信小程序控制view隐藏显示的五种方法
658 0
|
存储 前端开发 JavaScript
你可能需要的多文档页面交互方案(一)
你可能需要的多文档页面交互方案
105 1
|
安全 JavaScript 网络协议
你可能需要的多文档页面交互方案(二)
你可能需要的多文档页面交互方案
56 0