如何在SwiftUI中设置通过自定义结构传递的@State值的动画



我目前正在为我的应用程序制作身份验证视图,我想添加一些移动。我决定使用动画来更改视图的自定义角半径就可以了。

我在下面附上了一个链接,说明它目前的样子。

https://i.stack.imgur.com/qQ4OO.png

以下是专门处理拐角半径的代码(使用自定义结构只影响该拐角(:

Color("lapiz").ignoresSafeArea()
.customCornerRadius(CGSize(width: 125, height: 125), corners: .bottomRight)

当然,还有更多的代码,但这就是制作圆角半径的方法。以下是.customCornerRadius扩展代码和结构:

public extension View {

func customCornerRadius(_ radius: CGSize, corners: UIRectCorner) -> some View {
clipShape( CustomRoundedCorner(size: radius, corners: corners) )
}
}
struct CustomRoundedCorner: Shape {

var size: CGSize
var corners: UIRectCorner

func path(in rect: CGRect) -> Path {
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: size)
return Path(path.cgPath)
}
}

传递到CCD_ 3中的CCD_ 2宽度和高度当前设置为125。假设我将其附加到@State变量。

如何设置视图的动画以在例如100的CGSize之间切换?我可以无限期地重复一遍吗?

提前谢谢。

由于Shape继承且CGSize符合Animatable协议,因此您只需将您的var animatableData权限添加到CustomRoundedCorner形状即可。

struct CustomRoundedCorner: Shape {

var size: CGSize
var corners: UIRectCorner
var animatableData: CGSize {
get { return size }
set { size = newValue }
}

func path(in rect: CGRect) -> Path {
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: size)
return Path(path.cgPath)
}
}

之后,使用未来的@State变量,CGSize应在大小更改时设置动画。

最新更新