【SwiftUI模块】0032、SwiftUI搭建一个类似抖音评论模块的半页模式 - 底部抽屉
SwiftUI模块系列 - 已更新32篇
SwiftUI项目 - 已更新3个项目
往期Demo源码下载
技术:SwiftUI、SwiftUI4.0、抖音评论、半页模式、底部抽屉
运行环境:
SwiftUI4.0 + Xcode14 + MacOS12.6 + iPhone Simulator iPhone 14 Pro Max
SwiftUI搭建一个类似抖音评论模块的半页模式 - 底部抽屉
- 概述
- 详细
- 一、运行效果
- 二、项目结构图
- 三、程序实现 - 过程
- 1.创建一个项目命名为 `ScrollToHide`
- 1.1.引入资源文件和颜色
- Code
- ContentView - 主窗口
概述
使用SwiftUI搭建一个类似抖音评论模块的半页模式 - 底部抽屉
详细
一、运行效果
二、项目结构图
三、程序实现 - 过程
思路:
- 基于View扩展一个模态视图
- 使用SwiftUI的ViewControllerRepresentable
使用实例在 SwiftUI 界面中创建和管理对象。
能像UIKit那样管理对象,监听模态视图的代理- 使用SwiftUI的UIHostingController -
管理 SwiftUI 视图层次结构的 UIKit 视图控制器。
能向UIKit那样管理视图的生命周期或结构
1.创建一个项目命名为 ScrollToHide
1.1.引入资源文件和颜色
无
Code
ContentView - 主窗口
主要是展示主窗口
Home
设置半页模态弹框
- 基于View扩展一个模态视图
- 基于UIKit的UIViewControllerRepresentable
使用实例在 SwiftUI 界面中创建和管理对象。
监听模态视图的代理- 基于UIKit的UIHostingController -
管理 SwiftUI 视图层次结构的 UIKit 视图控制器。
//
// ContentView.swift
// ScrollToHide
//
// Created by 李宇鸿 on 2022/9/26.
//import SwiftUIstruct ContentView: View {var body: some View {Home()}
}struct ContentView_Previews: PreviewProvider {static var previews: some View {ContentView()}
}struct Home: View{@State var showSheet : Bool = falsevar body: some View {NavigationView{Button {showSheet.toggle()} label: {Text("Present Sheet")}.navigationTitle("Half Modal Sheet").halfSheet(showSheet: $showSheet) {// 你的半页视图…ZStack{Color.redVStack{Text("Hello iJustine").font(.title.bold()).foregroundColor(.white)Button {showSheet.toggle()} label: {Text("Close From Sheet").foregroundColor(.white)}.padding()}}} onEnd: {print("Dismiss")}}}
}// 自定义半页修饰器....
extension View {// 绑定变量显示……func halfSheet<SheetView:View>(showSheet:Binding<Bool>,@ViewBuilder sheetView: @escaping ()->SheetView,onEnd: @escaping()->()) ->some View{//为什么我们使用overlay…// 因为它将自动使用swiftUI帧大小…return self.background(HalfSheetHelper(sheetView: sheetView(),showSheet: showSheet,onEnd: onEnd))}
}// UIKit 集成
struct HalfSheetHelper<SheetView: View>: UIViewControllerRepresentable {var sheetView : SheetView@Binding var showSheet: Boolvar onEnd : ()->()let controller = UIViewController()func makeCoordinator() -> Coordinator {return Coordinator(parent: self)}func makeUIViewController(context: Context) -> some UIViewController {controller.view.backgroundColor = .clearreturn controller}func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {if showSheet {// 弹出模态视图let sheetController = CustomHostingController(rootView: sheetView)sheetController.presentationController?.delegate = context.coordinatoruiViewController.present(sheetController, animated: true)}else {// 当ShowSheet再次切换时…uiViewController.dismiss(animated: true)}}// 监听dismissclass Coordinator : NSObject,UISheetPresentationControllerDelegate {var parent : HalfSheetHelperinit(parent: HalfSheetHelper) {self.parent = parent}func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {parent.showSheet = falseparent.onEnd()}}}// 自定义UIHostingController for halfSheet…
class CustomHostingController<Content: View> : UIHostingController<Content> {override func viewDidLoad() {view.backgroundColor = .clear// 设置表示控制器属性…if let presentationController = presentationController as? UISheetPresentationController {presentationController.detents = [.medium(),.large()]// 为了显示抓取比例…presentationController.prefersGrabberVisible = true}}
}
【SwiftUI模块】0032、SwiftUI搭建一个类似抖音评论模块的半页模式 - 底部抽屉相关推荐
- 一个类似抖音 APP 拍摄按钮效果的控件
TouchButton 一个类似抖音 APP 拍摄按钮效果的控件 效果图预览 用法 <net.angrycode.library.TouchButtonandroid:id="@+id ...
- Android评论框,类似抖音评论弹框
项目github地址:CommitDialogCommentDialog 这是一个Android评论框,类似抖音评论弹框 最近公司有个需求,就是仿抖音弹窗评论,我也是在网上找了一些资料,并未找到有人实 ...
- 一个类似抖音音乐效果、直播间小心心的动画效果
适用于OC.Swift贝塞尔曲线动画 github地址有用请star,点此链接进入 demo里有完成说明
- c++怎么做app_想开发一个类似于抖音短视频这样的APP大概多少钱?应该怎么做?...
随着智能手机和网络速度的发展,类似的实时应用软件或短视频应用软件已经开发出来,也很受用户欢迎.开发一个类似抖音短视频的应用软件要花多少钱?这个问题也成为一些准备开发视频应用软件的商家和客户经常问及的问 ...
- BottomSheetDialog仿抖音评论区的UI效果
大家好!我国著名数学家华罗庚曾说:聪明在于勤奋,天才出于积累. 一.问题背景 当下抖音成为了人们平常生活消遣娱乐必不可少的视频软件,它评论区的UI具有良好的用户交互性,其动画效果非常人性化,滑动出现的 ...
- 【SwiftUI模块】0018、SwiftUI搭建一个类似支付宝中的余额宝余额数字动画效果
SwiftUI模块系列 - 已更新18篇 SwiftUI项目 - 已更新1个项目 往期Demo源码下载 技术:SwiftUI.SwiftUI3.0.支付宝.余额宝.数字动画 运行环境: SwiftUI ...
- html上下滑动视频代码,h5 实现视频手势上下屏滑动 (类似抖音)
h5 实现视频手势上下屏滑动 (类似抖音) 1. 首先考虑无限滑动的实现, 最初的第一反应, 是用竖向的轮播来实现. 这里要考虑的是如何实现无缝衔接- 是否开启无限循环 我是这样实现的, 总共轮播有三 ...
- 类似抖音的短视频APP开发和运营需要注意什么
类似抖音的短视频APP开发和运营需要注意什么 进入2018年,短视频市场的"战争"愈演愈烈.据艾瑞数据7月份移动APP指数分析显示,视频服务类APP中,抖音位居榜单第四位,仅次于传 ...
- 微信小程序实现类似抖音效果
背景 公司有个小程序项目要求做类似抖音的效果. 由于微信小程序受video兼容性的原因,总会产生很多意想不到的关于video的兼容性bug. 为了解决视频列表太多造成的卡顿,判断页面中只有滑动到当前页 ...
最新文章
- SQL Date 函数
- 高速电路EDA设计第一次实验
- 64位系統修復dll
- MAC 安装 Magento2 community edition 详细步骤
- golang unrecognized import path golang.org/x/net 完美解决方案
- Maven常用的命令
- 金蝶kis仓库管理系统演示_金蝶KIS专业版生产管理的系统亮点功能
- 服务器CPU X86 ARM PowerPC RISC介绍
- 【数据结构笔记02】什么是算法
- BeanAir无线传感器方案
- Firebird学习(02):数据库的中文参考资料
- mysql 安装没有my.cnf_Linux安装mysql没有my.cnf文件
- java课程设计 雍俊海_java课程设计模拟科学计算器【参考】.doc
- 基于51单片机的智能汽车雨刷控制系统方案原理图程序设计
- unity3d 工程原理_Unity3D——镜面反射原理及实现(一)
- 关于 css 中的转换属性,CSS3中的transform转换属性
- ajax感受,有什么缺点,浅谈ajax的优点与缺点
- 各个流行语言优缺点对比及其适用场景
- LeetCode刷题之路(四)——medium的进阶
- QQ语音测试-微信语音测试-王者荣耀游戏语音测试-社交APP语音质量测试
热门文章
- outlook2010设置msn的邮箱
- 如何查找自己的msn邮箱地址
- 微信查成绩php源码,PHP-Educational-Administration
- 垂直行业网站发展前景
- 无纺布袋厂的工作原理与运行维护
- mysql 浮动ip_MySQL配置HeartBeat实现心跳监控和浮动IP
- 【数据分析与挖掘实战】二手车价格预测1数据分析与特征构造详解(有数据集合代码)
- php 注销函数,在PHP中,可以使用()函数来注销Session会话。
- Time Series Classification时间序列分类 (一)
- excel图表技巧:如何应用占位改变分布美化图表