<error>:CGAffineTransformInvert:奇异矩阵</error>

时间:2013-06-17 10:14:41

标签: iphone ios objective-c animation

尝试在视图上执行此动画,将其缩放到(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);

但实际上我不知道如何解决这个问题,但是当我删除这一行时它缩小为零然后从零返回通常没有任何错误

2 个答案:

答案 0 :(得分:16)

您会收到此错误,因为缩放矩阵的行列式为零。当您尝试将变换更改为缩放1.0时,Core Graphics会尝试查找先前变换的逆矩阵,以将变换返回到单位矩阵。使用行列式0,这会产生一个不可逆的矩阵,这就是你得到这个错误的原因。不要将比例转换为0.0。

您确定在现在设置为0.0的两个缩放中接近零值检查了吗?

编辑(答案):

  • 因此,根据Raj的评论,为避免此错误,您必须尝试一个不等于零的值(但非常接近于零)。

即代替:

(transform,0.0f, 0.0f);

尝试:

(transform,0.01f, 0.01f);

(transform,0.001f, 0.001f);

答案 1 :(得分:8)

网页内容可能是导致此错误的原因,而不是您的iOS应用编程。

我发现只有在Yahoo时才会在我的应用中发生错误。 Google.com ,没问题。 Reuters.com ,没问题。 SeattleTimes.com ,没问题。返回 Yahoo.com 问题。特别是当滚动时,错误可能会在一瞬间出现几次。

有关my blog的更多详情。