尝试在视图上执行此动画,将其缩放到(0,0)然后使用CGRectMake方法移动此帧并将其缩放回(1,1)。 所以我用下面的代码来做这个
-(void)startWalkAnimationStartWalkingBtnViewScaleToZero{
CGAffineTransform transform = StartWalkBtnView.transform;
StartWalkBtnView.transform=CGAffineTransformScale(transform,1.0f, 1.0f);
[UIView animateWithDuration: 0.7
delay: 0.6
options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction)
animations:^{ StartWalkBtnView.transform = CGAffineTransformScale(transform, 0.0f, 0.0f);
}
completion:^(BOOL finished){
[UIView animateWithDuration:0.0
delay:0.0
options: UIViewAnimationOptionCurveEaseIn
animations:^{
StartWalkBtnView.frame=CGRectMake(92, 270, 120, 121);
}
completion:^(BOOL finished){
StartWalkBtnView.transform=CGAffineTransformScale(transform,0.0f, 0.0f);
[UIView animateWithDuration: 0.7
delay: 0.8
options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction)
animations:^{ StartWalkBtnView.transform = CGAffineTransformScale(transform, 1.0f, 1.0f);
}
completion:^(BOOL finished){}
];
}];
}
];
}
但是在尝试运行此动画后,我在控制台中收到以下错误。
Jun 17 12:02:49 Kareem.local MyAppName[3157] <Error>: CGAffineTransformInvert: singular matrix.
我用Google搜索了太多,并尝试了所提供的所有解决方案(Scale Near to zere Value,...)但没有任何效果,任何人都有解决这个问题的想法。 谢谢你的帮助
的更新: 的 我在以下行中发现了问题:
StartWalkBtnView.frame = CGRectMake(92,270,120,121);
但实际上我不知道如何解决这个问题,但是当我删除这一行时它缩小为零然后从零返回通常没有任何错误
答案 0 :(得分:16)
您会收到此错误,因为缩放矩阵的行列式为零。当您尝试将变换更改为缩放1.0时,Core Graphics会尝试查找先前变换的逆矩阵,以将变换返回到单位矩阵。使用行列式0,这会产生一个不可逆的矩阵,这就是你得到这个错误的原因。不要将比例转换为0.0。
您确定在现在设置为0.0的两个缩放中接近零值检查了吗?
编辑(答案):
即代替:
(transform,0.0f, 0.0f);
尝试:
(transform,0.01f, 0.01f);
或
(transform,0.001f, 0.001f);
答案 1 :(得分:8)