如何解决SwiftUI:[未知进程名称] CGAffineTransformInvert:单个矩阵错误
期望:点击心脏图标时会出现绿点加载动画
结果:什么也没发生,因为心脏动画也无法工作,感觉好像死机了
错误:[未知进程名称] CGAffineTransformInvert:单个矩阵。
Screenshot of the app(not working state)
代码:
struct ContentView: View {
@State private var count=0
@State var isPressed = false
@State var pressed = false
@State var isLoading = false
var body: some View {
VStack {
ZStack{
Circle()
.fill( isPressed ? Color(.systemGray4) : .red )
.overlay(Image(systemName:"heart.fill")
.foregroundColor(isPressed ? .red :.white)
.font(.system(size:100))
.scaleEffect( pressed ? 1.5 : 1.0)
)
.frame(width: 300,height: 300)
}
.onTapGesture{
self.isLoading.toggle()
withAnimation(.spring(response: 1,dampingFraction: 0.4,blendDuration :0.9)){
self.isPressed.toggle()
self.pressed.toggle()
self.isLoading.toggle()
}
}
HStack{
ForEach(0...4,id: \.self){index in
Circle()
.frame(width:10,height:10)
.foregroundColor(.green)
.scaleEffect(self.isLoading ? 1:0)
.animation(Animation.linear(duration:0.6).repeatForever().delay(0.2*Double(index)))
}
}
.padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
注意:当我不切换isLoading
块内的onTapGesture()
状态变量并且当视图出现在{{1 }}阻止
解决方法
原因:
问题基本上与 CGAffinTransform
在视图中使用修饰符 ScaleEffect 时,编译器会在后台对您提供的比例值执行一些转换。
由于为.scaleEffect()提供了值0(零),因此将大小设为零并将其视为奇异矩阵(其行列式为零的矩阵类型)。并且还考虑了在行列式为零的矩阵上执行运算的数学违反。
解决方案:
请确保您使用的是.scaleEffect(),不要将View缩放为精确到0。您可以使用最小的值,即0.1或0.01
,问题出在0
scaleEffect中。
这里是固定代码。已通过Xcode 11.4 / iOS 13.4测试。还纠正了isLoading = false
struct ContentView: View {
@State private var count=0
@State var isPressed = false
@State var pressed = false
@State var isLoading = false
var body: some View {
VStack {
ZStack{
Circle()
.fill( isPressed ? Color(.systemGray4) : .red )
.overlay(Image(systemName:"heart.fill")
.foregroundColor(isPressed ? .red :.white)
.font(.system(size:100))
.scaleEffect( pressed ? 1.5 : 1.0)
)
.frame(width: 300,height: 300)
}
.onTapGesture{
self.isLoading.toggle()
withAnimation(.spring(response: 1,dampingFraction: 0.4,blendDuration :0.9)){
self.isPressed.toggle()
self.pressed.toggle()
}
}
HStack{
ForEach(0...4,id: \.self){index in
Circle()
.frame(width:10,height:10)
.foregroundColor(.green)
.scaleEffect(self.isLoading ? 1:0.01)
.animation(self.isLoading ? Animation.linear(duration:0.6).repeatForever().delay(0.2*Double(index)) :
.default
)
}
}
.padding()
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。