我目前正在为我的应用程序制作身份验证视图,我想添加一些移动。我决定使用动画来更改视图的自定义角半径就可以了。
我在下面附上了一个链接,说明它目前的样子。
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应在大小更改时设置动画。