私はこれについて詳しく調べましたが、この問題に関連するwebViewとテーブルしか取得できないようです。鉱山はまったく異なりますが、同じクラッシュ例外があります。
CALayerInvalidGeometry '、理由:' CALayerの境界にNaNが含まれています:[0 0;ナンナン]
基本的にここにあるのは、画像をフェードおよびスケールするビューです。最近、タイマーが刻むたびにノッチを拡大するのではなく、UIViewアニメーションでCGAffineTransformScaleを使用してコードを変更することにしました。これにより、処理能力が大幅に低下します。
しかし、どのような順序で写真を並べても、19回目以降は常にクラッシュします。それが参照する位置決め座標配列には問題がないようです。これは、長さが6であり、長さに達した後にループするためです。なぜかこのアニメーションコードを実装したので、何らかの理由でクラッシュします。誰もが理由を知っていますか?
クラッシュし始めてから変更した部分は次のとおりです。
-(void) onTimer{
if(scaleTimer_A==5){
imageView_A.image = [UIImage imageNamed:[attractList_A objectAtIndex:imageIndex_A]];
imageView_A.frame = CGRectMake(300, 200, 3.86, 3.86);
imageView_A.center = CGPointMake(attractLocs_x_A[attractLocs_A_index], attractLocs_y_A[attractLocs_A_index]);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
imageView_A.alpha = 1;
imageView_A.transform = CGAffineTransformScale(imageView_A.transform, 100, 100);
[UIView commitAnimations];
}
if(scaleTimer_A==10){
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.75];
imageView_A.alpha = 0;
imageView_A.transform = CGAffineTransformScale(imageView_A.transform, 1.2, 1.2);
[UIView commitAnimations];
scaleTimer_A=0;
imageIndex_A+=1;
if(imageIndex_A==imageIndex_A_size){
imageIndex_A=0;
}
attractLocs_A_index+=1;
if(attractLocs_A_index==attractLocs_A_SIZE){
NSLog(@"Back to zero A");
attractLocs_A_index=0;
}
NSLog(@"Image A =%@", [attractList_A objectAtIndex:imageIndex_A]);
}
scaleTimer_A+=1;}
[〜#〜]編集[〜#〜]:
CGAffineTransformIdentityを使用してクラッシュする問題なしに上記のコードを機能させる方法を次に示します。
-(void) onTimer{
if(scaleTimer_A==5){
imageView_A.image = [UIImage imageNamed:[attractList_A objectAtIndex:imageIndex_A]];
imageView_A.transform = CGAffineTransformIdentity;
imageView_A.center = CGPointMake(attractLocs_x_A[attractLocs_A_index], attractLocs_y_A[attractLocs_A_index]);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
imageView_A.alpha = 1;
imageView_A.transform = CGAffineTransformScale(CGAffineTransformIdentity, 100, 100);
[UIView commitAnimations];
}
if(scaleTimer_A==10){
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.75];
imageView_A.alpha = 0;
imageView_A.transform = CGAffineTransformScale(CGAffineTransformIdentity, 120, 120);
[UIView commitAnimations];
scaleTimer_A=0;
imageIndex_A+=1;
if(imageIndex_A==imageIndex_A_size){
imageIndex_A=0;
}
attractLocs_A_index+=1;
if(attractLocs_A_index==attractLocs_A_SIZE){
NSLog(@"Back to zero A");
attractLocs_A_index=0;
}
NSLog(@"Image A =%@", [attractList_A objectAtIndex:imageIndex_A]);
}
scaleTimer_A+=1;}
スタックトレースによると、問題はここにあります
imageView_A.frame = CGRectMake(300, 200, 3.86, 3.86);
ImageView_A.transformをidentityに設定してみてください。別の解決策(そして私はより良いと思います)は、スケーリングにUIScrollViewを使用することです(アニメーション化することもできます)。
編集:これを試してください
imageView_A.image = [UIImage imageNamed:[attractList_A objectAtIndex:imageIndex_A]];
imageView_A.frame = CGRectMake(300, 200, 3.86, 3.86);
imageView_A.center = CGPointMake(attractLocs_x_A[attractLocs_A_index], attractLocs_y_A[attractLocs_A_index]);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
imageView_A.alpha = 1;
imageView_A.frame = CGRectMake(300, 200, 386.0f, 386.0f);
[UIView commitAnimations];