2011-01-31 13 views
1

View Controllerで2つのビュー間でUIアニメーションを実行しようとすると、この奇妙な問題が発生しています。Strange UIアニメーション効果を表示

メインメニューに戻ると、灰色のバーが中央から下に向かってすばやく移動します。それは第2画面の戻るボタンに起こりますが、見るのは難しいです。ですから、基本的にビュー内の部品が飛び回っていて、アニメーションの切り替えが完了したときの位置に移動します。

私は、アニメーションのために、このコードは少し奇妙に見えるかもしれません知っているが、ここに戻って、メインメニューに行くための方法です:

- (void)gotoMain_t{ 

NSLog(@"switch to main"); 

[UIView beginAnimations:nil context:NULL]; { 

    for(UIView *v in [containerView subviews]) { 
     v.frame = CGRectMake(0, 0, 1024, 768); 
     [UIView setAnimationDidStopSelector:@selector(removeT:finished:context:)]; 
    } 

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

    MainMenu *mainMenu = [[MainMenu alloc] init]; 
    mainMenu.frame = CGRectMake(-1024, 0, 1024, 768); 
    [containerView insertSubview:mainMenu atIndex:1]; 


    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:.4]; 
    [UIView setAnimationDelegate:self]; 

    [[self.view.subviews objectAtIndex:0] setFrame:CGRectMake(1024, 0, 1024, 768)]; 

    mainMenu.frame = CGRectMake(0, 0, 1024, 768); 

    [mainMenu release]; 

} 

[UIView commitAnimations];} 

任意のアイデア?ありがとう。

+0

setAnimationDidStopSelectorは奇妙に見えますが、それは私がそれだけcommitAnimation後に呼び出されると思うので、あなたは、ループ内でそれを設定する必要がはっきりしません。 –

+0

何が起こると思いますか? –

+0

私はちょうどビューを他の各方法にスライドさせたい。しかし、私が何を言っているのか見ていますか?灰色のバーは、明白な理由がないために中央から下に向かっています。 – VagueExplanation

答えて

1

開始する前にすべてをビューアニメーションにレイアウトすることが重要です。下記の固定コード:

- (void)gotoMain_t{ 

NSLog(@"switch to main"); 

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 

for(UIView *v in [containerView subviews]) { 
    v.frame = CGRectMake(0, 0, 1024, 768); 
} 

MainMenu *mainMenu = [[MainMenu alloc] init]; 
mainMenu.frame = CGRectMake(-1024, 0, 1024, 768); 
[containerView insertSubview:mainMenu atIndex:1]; 

[UIView beginAnimations:nil context:NULL]; { 

    [UIView setAnimationDidStopSelector:@selector(removeT:finished:context:)]; 

    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:.4]; 
    [UIView setAnimationDelegate:self]; 

    [[self.view.subviews objectAtIndex:0] setFrame:CGRectMake(1024, 0, 1024, 768)]; 

    mainMenu.frame = CGRectMake(0, 0, 1024, 768); 

    [mainMenu release]; 

} 

[UIView commitAnimations]; 

}

+0

、つまりbeginAnimationsの前にvとmainMenuのフレームが確立されていることに注意してください。 – VagueExplanation

1

beginAnimations:の前に、そのグレーバーの座標を終了位置に設定してください。したがって、CoreAnimationはアニメーション化しようとしません。それがうまくいけば、その位置を調整してアニメーションが最後に見えるようにすることができます。何とか灰色のバーのyの位置が画面の中央に変わるように見えます。

+0

実際にアニメーションを始める前にすべてをレイアウトしていなかったのです。ありがとう! – VagueExplanation

関連する問題