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