1

ユーザーが画像をクリックすると表示され、その後に次のコードが表示されるアプリを作成しています。ご覧のとおり、画像がフェードアウトしてから、スーパービューから削除したいと思います。

これはコードです:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8f];
[UIView setAnimationDelay:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
tempImageView1.alpha = 0;
tempImageView2.alpha = 0;
[UIView commitAnimations];

[tempImageView1 removeFromSuperview];
[tempImageView2 removeFromSuperview];
//[self performSelector:@selector(removeFromSuperview) withObject:tempImageView1 afterDelay:1.8f];
//[self performSelector:@selector(removeFromSuperview) withObject:tempImageView2 afterDelay:1.8f];

私を困惑させるのは、[tempImageView1removeFromSuperview]と書くと; アプリは動作しますが、もちろん画像は表示される前に閉じます。上記のコメント行の1つを書き込もうとすると、同じことを実行しますが、遅延が発生し、エラーメッセージが表示されます。

理由は次のとおりです。「[GamePage2removeFromSuperview]:認識されないセレクターがインスタンスに送信されました」

4

4 に答える 4

0

tempImageView1 ではなく、自分自身でセレクターを呼び出すためです。

あなたは試しました[tempImageView1 performSelector ...] か?

于 2012-12-13T06:48:06.780 に答える
0

ただ、最初に上記のコードで 1 つのメソッドを作成し、次にこのメソッドを delaytime で呼び出します

[self performSelector:@selector(removeImage) withObject:nil afterDelay:2.0];

-(void)removeImage{

     [tempImageView1 removeFromSuperview];
     [tempImageView2 removeFromSuperview];
     CATransition *animation = [CATransition animation];
 [animation setDelegate:self];  
 [animation setType:kCATransitionFade];
 [animation setDuration:0.5];
 [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                              kCAMediaTimingFunctionEaseInEaseOut]];
  [[tempImageView1 layer] addAnimation:animation forKey:@"transitionViewAnimation"];
 [[tempImageView2 layer] addAnimation:animation forKey:@"transitionViewAnimation"];
}
于 2012-12-13T06:48:26.847 に答える
0

あなたのコードで

tempImageView1.alpha = 1;
tempImageView2.alpha = 1;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8f];
[UIView setAnimationDelay:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
tempImageView1.alpha = 0;
tempImageView2.alpha = 0;
[tempImageView1 removeFromSuperview];
[tempImageView2 removeFromSuperview];
[UIView commitAnimations];
于 2012-12-13T06:50:42.997 に答える
0

コードの実行は、途中にあるアニメーション ループでは停止されないため、「removeFromSuperView」を呼び出すと、アニメーションが完了する前でもそのメソッドが実行されます。これにより、アニメーションなしで画像が削除されます。遅延メソッドの後に実行セレクターを使用できますが、この場合は GamePage2 である対応するオブジェクトで呼び出す必要があります。self を GamePage2 に置き換えると、正常に動作するはずです。より良い方法は、以下のように実行できるアニメーション完了ハンドラーを使用することです

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.1.8];
    [UIView setAnimationDelegate: self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:context:)];

    //your animation code... 
    [UIView commitAnimations];

これにより、アニメーションが完了した後に指定されたセレクターが呼び出され、そこにスーパービューからの削除メソッドを書き込むことができます。

于 2012-12-13T06:51:12.933 に答える