6

これは私の最初の投稿stackoverflowです。私はiOSデベロッパー初心者で、私はネイティブの英語話者ではないので、私は自分の問題を説明するために最善を尽くします。UIView transitionFromView:toView:アニメーションが機能しません。

問題:私は、私が使用して一方から他方へ反転したいと私AppDelegateウィンドウに2つのビューが追加されている

UIView transitionFromView:toView: 

最初のビュー(MainScreenView)は、独自のを持っていViewController 。 MainScreenView .xibファイルには、私のAppDelegateに実装されたメソッド "goShow"を呼び出すアクションを持つボタンがあります。この方法では、UIView transitionFromView:toView:を使用して2番目のビューに遷移します。これまでのところすべてがうまくいきます。 私の2番目のビュー(スクロールビュー)はAppDelegateでプログラムで宣言され、その中にピクチャの束(picturesViewController)があり、その上にUIPinchGestureRecognizerがあります。

私はジェスチャーレコグナイザーを使用してメインスクリーンビューに戻ります。それが問題の場所です。スクロールビューでピンチジェスチャーを実行すると、MainScreenView.viewがアニメーションの直前に表示されるので、フリップアニメーションが正しく表示されません。

私が使用しているコードは次のとおりです。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

mainScreen = [[MainScreenViewController alloc] initWithNibName:@"MainScreenViewController" bundle: [NSBundle mainBundle]]; 

CGRect frame = self.window.bounds; 
int pageCount = 10; 
scrollView = [[UIScrollView alloc] initWithFrame:frame]; 
scrollView.contentSize = CGSizeMake(320*pageCount, 480); 
scrollView.pagingEnabled = YES; 
scrollView.showsHorizontalScrollIndicator = FALSE; 
scrollView.showsVerticalScrollIndicator = FALSE; 
scrollView.delegate = self; 

[...] 'While' adding pictures to de scrollView 

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain)] autorelease]; 
[scrollView addGestureRecognizer:twoFingerPinch]; 

[self.window addSubview: scrollView]; 
[scrollView setHidden:TRUE]; 
[self.window addSubview: mainScreen.view]; 

[self.window makeKeyAndVisible]; 
return YES; 
} 

-(void) goShow{ 

[UIView transitionFromView:mainScreen.view 
        toView:scrollView 
        duration:0.5 
        options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews      
       completion:NULL]; 

[UIView commitAnimations];  
} 

-(void) goBackToMain { 

[UIView transitionFromView:scrollView 
        toView:mainScreen.view 
        duration:0.5 
        options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews      
       completion:NULL]; 

[UIView commitAnimations]; 
} 

私はアドオンを試してみましたが、削除して、ピンチジェスチャーでアプリのクラッシュを持って、正確に同じであるため、私は代わりにaddSubview/removeFromSuperViewの表示/非表示のビューを使用していますアニメーションに失敗したステップ。おそらくそれは同じエラーですが、私はこれの理由を見つけることができません。どんな助けもありがとう。

ありがとうございました。

[...] 

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain:)] autorelease]; 
[scrollView addGestureRecognizer:twoFingerPinch]; 


-(void)goBackToMain:(UIPinchGestureRecognizer *)recognizer { 

if (recognizer.state == UIGestureRecognizerStateEnded) 
{ 
    [UIView transitionFromView:scrollView 
         toView:mainScreen.view 
         duration:0.4 
         options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews      
        completion:nil]; 

    [UIView commitAnimations]; 
} 
+1

たくさん良くなったほとんどの英語のネイティブスピーカーが管理するよりも、説明しました。 +1。 –

答えて

0

Read more about animations in iOS:エイドリアンの助けを借りて、ここに私の問題を解決しUIPinchGestureコードです。

あなたの例では、[UIView beginAnimations]を忘れました。

+0

こんにちはエイドリアン、あなたの返信をありがとう。 – romeup

+0

私はこれに関するAppleのドキュメントを読んだことがありますが、私の問題を解決するのには役立たないようです。私はこのアプリケーションをiOS4(.3)用にターゲットにしており、[UIView beginAnimations]は推奨されていません。 AppleはブロックAPIの使用を推奨しています。実際、私の「goShow」メソッドは完全に機能します。明らかに似ている 'goBackToMain'はそうではありません。両方の違いは、 'goBackToMain'がUIPinchGestureRecognizerによって呼び出されていることです。ジェスチャ認識エンジンのコードに問題があるかどうか、そして問題が何であるかは分かりませんが、このバグの他の理由は考えられません。 – romeup

+0

ピンチレコグナイザを使用している場合は、ジェスチャをパラメータとして入力して、ジェスチャの状態を取得して特定のイベント(UIGestureRecognizerStateBeganなど)でコードを実行させることができます。とにかく、アニメーションでブロックを使用しない場合でも、[UIView begnAnimations]を使用する必要があります。ここにジェスチャーの例があります:UIPinchGestureRecognizer * twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:自己アクション:@selector(goBackToMain :)] autorelease];メソッドは " - (void)goBackToMain:(UIGestureRecognizer *)ジェスチャー"にする必要があります –

0

最初に、古いメソッドbeginAnimationcommitAnimationと新しいブロックメソッドtransitionFromViewを組み合わせることはできません。

第2に、ブロックメソッドアニメーションを使用する場合は、切り替えたい2つのビューの親となるコンテナ(おそらくUIView)を使用してください。コンテナがなければ、代わりにビュー全体をアニメートします。コンテナのサイズが切り替えられるサブビューと同じであることを確認してください。

例:

 

    [container addSubView:frontView]; 
    [container addSubView:backView]; 

    [self.view addSubView:container]; 

    [UIView transitionFromView:backView toView:frontView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight completion:nil]; 

関連する問題