【SwiftUI模块】0008、SwiftUI-自定义启动闪屏动画-App启动闪屏曲线路径动画
SwiftUI小功能模块系列
0001、SwiftUI自定义Tabbar动画效果
0002、SwiftUI自定义3D动画导航抽屉效果
0003、SwiftUI搭建瀑布流-交错网格-效果
0004、SwiftUI-<探探App>喜欢手势卡片
0005、SwiftUI-粘性动画指示器引导页
0006、SwiftUI自定义引导页动画
0007、SwiftUI聚光灯介绍说明
0008、SwiftUI-自定义启动闪屏动画-App启动闪屏曲线路径动画
技术:SwiftUI、SwiftUI3.0、动画闪屏、启动动画闪屏、启动闪屏曲线路径动画、动画灵感 - 来自德国的
freYfahrt
打车软件
运行环境:
SwiftUI3.0 + Xcode13.4.1 + MacOS12.5 + iPhone Simulator iPhone 13 Pro Max
SwiftUI-自定义App启动闪屏曲线路径动画效果
- 概述
- 详细
- 一、运行效果
- 二、项目结构图
- 三、程序实现 - 过程
- 1.创建一个项目命名为 `SplashsAnimation`
- 1.1.引入资源文件和颜色
- 1.2 设置启动闪屏的背景颜色跟闪屏背景颜色同步
- 2. 创建一个虚拟文件`New Group` 命名为 `View`
- 2. 创建一个文件`New File` 选择`SwiftUI View`类型 命名为`SplashScreen`
- 3. 创建一个文件`New File` 选择`SwiftUI View`类型 命名为`Home`
- Code
- ContentView - 主窗口
- Home - 主页
- SplashScreen - 闪屏动画页面
- demo源码
概述
使用SwiftUI做一个App启动闪屏logo定制曲线路径的案例
详细
一、运行效果
二、项目结构图
三、程序实现 - 过程
思路:
1.创建闪屏动画页面
2.画图 画出J 、| 、和J的倒放
、2个小圆点
然后控制动画
3.创建 主页导航 + 滚动视图 + N个图片
4.处理闪屏动画结束 展示主页逻辑
1.创建一个项目命名为 SplashsAnimation
1.1.引入资源文件和颜色
颜色
SplashColor#DD8482
随机图片5张
1.2 设置启动闪屏的背景颜色跟闪屏背景颜色同步
2. 创建一个虚拟文件New Group
命名为 View
2. 创建一个文件New File
选择SwiftUI View
类型 命名为SplashScreen
3. 创建一个文件New File
选择SwiftUI View
类型 命名为Home
主要是:
展示
闪屏过后的首页
Code
ContentView - 主窗口
主要是展示主窗口
Home
和闪屏页面
一开始是闪屏页面 。闪屏动画执行完毕 就会偏移y为整个屏幕的高度。
所以首页需要判断是否动画结束完成 完成就进行一个偏移
//
// ContentView.swift
// Shared
//
// Created by 李宇鸿 on 2022/8/19.
//import SwiftUIstruct ContentView: View {// 当动画完成时做动作…@State var endAnimation : Bool = falsevar body: some View {ZStack {Home()// 一开始将首页y设置为0 动画过渡完毕 就偏移到整个屏幕的高度.offset(y:endAnimation ? 0 : getRect().height)SplashScreen(endAnimation:$endAnimation)}}
}struct ContentView_Previews: PreviewProvider {static var previews: some View {ContentView()}
}
Home - 主页
思路
- 主要就是展示一个导航栏 + 滚动视图 + 多张图片
//
// Home.swift
// SplashsAnimation (iOS)
//
// Created by 李宇鸿 on 2022/8/19.
//import SwiftUIstruct Home: View {var body: some View {NavigationView{ScrollView(.vertical,showsIndicators: false) {VStack(spacing:20){ForEach(1...5,id:\.self){index inImage("Pic\(index)").resizable().aspectRatio(contentMode: .fit).frame(width: getRect().width - 30, height: 220).cornerRadius(15)}}.padding(15)}.navigationTitle("Trending Posts")}}
}struct Home_Previews: PreviewProvider {static var previews: some View {Home()}
}
SplashScreen - 闪屏动画页面
做法思路
- 画出几个图形
J 、| 、和J的倒放
、2个小圆点
- 通过逻辑去控制每一个的动画 - 注意其中
J 、| 、和J的倒放
是一个动画组- 控制动画结束之后 展示首页
//
// SplashScreen.swift
// SplashsAnimation (iOS)
//
// Created by 李宇鸿 on 2022/8/19.
//import SwiftUIstruct SplashScreen: View {// 动画属性……@State var startAnimation : Bool = false@State var circleAnimation1 : Bool = false@State var circleAnimation2 : Bool = false// 结束的动画@Binding var endAnimation : Boolvar body: some View {ZStack{Color("SplashColor")Group{// 自定义形状与动画…SplashShape()// 修剪.trim(from: 0, to: startAnimation ? 1 : 0)// 描边得到轮廓.stroke(Color.white,style: StrokeStyle(lineWidth: 30, lineCap: .round, lineJoin: .round))// 两个圆……Circle().fill(.white).frame(width: 35, height: 35).scaleEffect(circleAnimation1 ? 1 : 0).offset(x:-80, y: 22)Circle().fill(.white).frame(width: 35, height: 35).scaleEffect(circleAnimation2 ? 1 : 0).offset(x:80, y: -22)}// 默认尺寸.frame(width:220,height:130)// 如果是动画已经结束 就缩放到0.15倍.scaleEffect(endAnimation ? 0.15 : 0.9).rotationEffect(.init(degrees: endAnimation ? 85: 0))// 底部文案VStack{Text("Powered by").font(.callout).fontWeight(.semibold)Text("宇夜iOS").font(.title2).fontWeight(.semibold)}.frame(maxHeight:.infinity,alignment: .bottom).foregroundColor(Color.white.opacity(0.8)).padding(.bottom,getSafeArea().bottom == 0 ? 15 : getSafeArea().bottom).opacity(startAnimation ? 1 : 0).opacity(endAnimation ? 0 : 1)}// 移动视图….offset(y:endAnimation ? (-getRect().height * 1.5) : 0).ignoresSafeArea().onAppear {// 推迟开始……withAnimation(.spring().delay(0.15)){// 第一圈……circleAnimation1.toggle()}// 下一个形状……withAnimation(.interactiveSpring(response: 0.7, dampingFraction: 1.05, blendDuration: 1.05).delay(0.3)){startAnimation.toggle()}// 最后一个圆withAnimation(.spring().delay(0.7)){circleAnimation2.toggle()}// 动画结束withAnimation(.interactiveSpring(response: 0.7, dampingFraction: 1.05, blendDuration: 1.05).delay(1.2)){endAnimation.toggle()}}}
}struct SplashScreen_Previews: PreviewProvider {static var previews: some View {ContentView()}
}// 扩展视图以获得屏幕框架…
extension View{func getRect()->CGRect{return UIScreen.main.bounds}// 安全的地方func getSafeArea()->UIEdgeInsets{guard let screen = UIApplication.shared.connectedScenes.first as? UIWindowScene else{return .zero}guard let safeArea = screen.windows.first?.safeAreaInsets else{return .zero}return safeArea}
}struct SplashShape: Shape {// 画出3个路径 J | J的反转func path(in rect: CGRect) -> Path {return Path{ path inlet mid = rect.width / 2let height = rect.height// 80 = 40:弧半径…path.move(to: CGPoint(x: mid - 80, y:height))path.addArc(center: CGPoint(x: mid - 40 , y: height), radius: 40, startAngle: .init(degrees: 180), endAngle: .zero, clockwise: true)// 直线……path.move(to: CGPoint(x: mid, y: height))path.addLine(to: CGPoint(x: mid, y: 0))// 另一个弧…path.addArc(center: CGPoint(x: mid + 40 , y: 0), radius: 40, startAngle: .init(degrees: -180), endAngle: .zero, clockwise: false)}}
}
demo源码
如需看源码,请点击下载!
【SwiftUI模块】0008、SwiftUI-自定义启动闪屏动画-App启动闪屏曲线路径动画相关推荐
- android动画框架,GitHub - azhengyongqin/CustomAnimationFramework: Android自定义曲线路径动画框架...
Android自定义曲线路径动画框架 最近在一个项目中需要一个像QQ打开个人爱好那样的动画效果如下图: 可以看出每个小球都是以顺时针旋转出来的,说明像这样的曲线动画用Android中自带的平移动画是很 ...
- android应用白屏闪退,解决 APP启动白屏黑屏问题
闪屏页简介 闪屏页,我们手机上的每个 APP 几乎都有自己的闪屏页,就是在真正进入程序前,会有一个页面停顿几秒钟.其实我们完全可以充分利用好这几秒钟做很多的程序初始化了启动. 为什么我的 APP 启动 ...
- android 7.0 黑屏,Android app启动是出现白屏或者黑屏如何解决?
1.为什么 APP 启动时会出现白屏或者黑屏? 当打开一个 Activity 时,如果这个 Activity 所属的应用还没有在运行,系统会为这个 Activity 所属的应用创建一个进程,但进程的创 ...
- android启动画面白屏,Android app启动时黑屏或者白屏的原因及解决办法
1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背 ...
- android app启动失败,Android应用App启动白屏(黑屏)问题解决
Android应用App启动白屏(黑屏)问题解决 点击Android手机桌面的应用App icon图标后,Android启动这个应用,正常情况下会立即看到并进入到开发者自己写在MainActivity ...
- linux全屏时钟应用下载,全屏时钟app下载-全屏时钟(azar Flip clock)app手机版v1.1.1-电玩之家...
全屏时钟是一款有趣的时钟软件,全屏时钟支持安卓和ios,任何手机机型均可使用.全屏时钟是款趣味时钟软件,它支持全屏时钟显示功能.全屏时钟支持动画自定义设置功能,让手机屏幕变得与众不同.感兴趣的用户们快 ...
- app息屏后ajax请求不执行_息屏时钟app下载-息屏时钟软件下载v1.0 安卓版
息屏时钟app是一款息屏后可以在手机上显示各种时间的app,软件中可以感受全新的主题桌面,美化手机屏幕,不需要唤醒手机也能查看时间,软件的功能众多,还可以设置不同的息屏画面,超多内容可以体验,快来试试 ...
- 分析启动耗时 android,Android app启动耗时分析
首先编译你的程序,打开Android Studio里面的Android Monitor,找到下图的按钮 <img src="//bbsm ...
- android 签名包闪退,解决APP连续闪退的方案,你还不知道的签名方式
原标题:解决APP连续闪退的方案,你还不知道的签名方式 用户在使用APP检测到连续闪退后,接下来要尝试对闪退进行修复,这里先分析可能的闪退原因: 闪退原因 连续闪退,可能是 App 启动关键路径中执行 ...
最新文章
- 详解ABBYY FineReader 12扫描亮度设置
- CommonJs模块规范
- 还有多少时间可以用来读书
- CentoS8 Mysql8 数据目录迁移
- 【玩转树莓派】使用 sinopia 搭建私有 npm 服务器
- linux apache添加多站点配置(Ubuntn和Centos)
- STM32f4 ARM Bootloader
- 【HDU - 3394】Railway(点双连通分量,Tarjan算法,思维tricks)
- CSS如何实现两个a标签元素的文字一个靠左一个靠右,并且能点击分别不同的链接
- JavaScript 中的 window onload 应该什么时候写
- mysql .pdb是什么文件_超详细讲解如何使用 pdb 在服务器上调试代码
- 利用jsonp实现跨域请求
- Xocde一次版本升级遇到的问题 (Code Sign Error)
- 如何使用Java代码获取Android移动终端Mac地址
- 用java求解八枚银币问题_算法笔记_004:8枚硬币问题【减治法】
- 关于DllRegisterServer的调用失败的问题解决办法
- 基恩士PLC⑤--Fault程序实例笔记
- oracle的安装(因为oracle版本安装各有差异,今天先讲最简单的安装,至于每个版本的具体安装度妈会讲,下一章同样会介绍可视化工具)
- win10使用VMware Workstations安装CentOS
- c语言 10行帕斯卡三角形,C语言帕斯卡三角形打印示例
热门文章
- 网页爬虫之二手车价格爬虫
- python缩进快捷键 gvim_vim python缩进问题 - 卡饭网
- ABAP SORT排序注意点
- 1h-8学习(1):1h-8适配之int8直接量化+转.cambricon格式
- oppo r11 android版本,OPPO R11有哪些版本_OPPO R11内存多大-太平洋IT百科
- 答案解析(C语言版本)——第五届“传智杯”全国大学生计算机大赛(练习赛)
- imovie for Mac(高级视频剪辑软件)
- 如何使用损坏的电源按钮锁定iPhone 或 iPad?
- iview的树形控件的使用 尤其是点击文字展开子节点的方法
- ASP.ENT C#生成excl表格