8

ビューでこのアニメーションを実行しようとしています。(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.

私はこれをグーグルで検索しすぎて、提供されたすべての解決策を試しました(ゼロ値に近い値にスケールする...)が、何も機能しませんでした。手伝ってくれてありがとう

更新: 次の行に問題があることがわかりました:

StartWalkBtnView.frame=CGRectMake(92, 270, 120, 121);

しかし、実際には問題の解決方法はわかりませんが、この行を削除すると、エラーなしでゼロにスケーリングされ、通常はゼロから戻ります

4

2 に答える 2

17

スケーリング行列の行列式がゼロであるため、このエラーが発生します。変換をスケール 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);
于 2013-06-17T12:59:29.710 に答える
8

iOS アプリのプログラミングではなく、Web ページのコンテンツがこのエラーの原因である可能性があります。

Yahooでのみアプリでエラーが発生したことがわかりました。Google.com、問題ありません。Reuters.com、問題ありません。SeattleTimes.com、問題ありません。Yahoo.comに戻る、問題。特に、スクロール中にエラーが数秒間に数回表示される場合があります。

詳しくはブログで

于 2013-08-21T07:21:24.253 に答える