SwiftUI - 封装打开书本效果的书本视图?
目标
- 外部可传递一个配置信息(例如: 书本宽高, 书本圆角, 书本阴影, 书本打开进度, 书本翻页分割线颜色 )
- 外部自定义封面、打开内部(左侧、右侧)
- 打开效果(动画 平滑)
实现预期效果
主逻辑代码
外部如何使用的?
其他信息
封装提供给外部的接口
配置信息如下
有哪些新东西?
Animatable协议
在SwiftUI中,Animatable
是一个协议,用于表示可以通过动画进行过渡的值类型。通过采用Animatable
协议,您可以定义自定义视图属性,这些属性可以通过动画进行平滑过渡,以实现更具吸引力和生动的用户界面。
当您的自定义视图需要支持动画效果时,可以通过遵循Animatable
协议来实现。该协议要求您提供一个animatableData
属性,该属性表示动画可以影响的数据。animatableData
的类型可以是任何可以插值的类型,例如CGFloat
、CGSize
、CGRect
等。
当您更改了animatableData
属性时,SwiftUI会自动调用animatableData
的setter,并使用Core Animation将新旧值之间的动画进行插值。这样,您就可以在自定义视图中使用SwiftUI的动画系统来实现平滑的效果。
以下是一个简单的示例,演示了如何在SwiftUI中使用Animatable
协议:
1 | import SwiftUI |
在此示例中,MyAnimatableCircle
结构体遵循了Animatable
协议,并提供了animatableData
属性以控制圆的直径。在ContentView
中,通过点击手势触发的动画,控制了圆的放大和缩小。
再来看一遍运行效果
The End