2011-08-08 4 views
1

私はカスタムアニメーションを使用してUINavigationControllerのビュースタック内のビューコントローラ間を移動するアプリケーションを作成しようとしています。UIView transitionWithViewファンキーな結果

今、私は同じビューの複数のラスターを追加しています。ちょうどメカを起動して正しく動作させるためです。

視覚的な目標は次のとおりです。
1.新しい「FirstVC」を作成します。
2. [FirstVCビュー]のアルファ値を0に設定します。
3. [FirstVCビュー]の変換値を両方向で25%(水平&)に設定します。

アニメーションブロックでは、
を入力します。1. [OutgoingVCビュー]の変換値を両方向に500%に設定します(5倍に吹きます)。
2. [OutgoingVCビュー]のアルファ値を0に設定します(何もフェードアウトしません)。
3. [FirstVCビュー]の変換値を1に設定します(元のサイズに戻します)。 4. [FirstVCビュー]のアルファ値を1に設定します(フルカラーにフェードイン)。

このアニメーションのネットエフェクトは、「次のページ/下のページ」が吹き上がって(フルスクリーンのみ)、フェードインしている間、「トップページ」が爆発してフェードアウトすることです。床や何かを介して。 「もっと深く」

私はアニメーションを10.0秒まで遅くしていますので、何が起こっているのかをよりよく把握できます。

「OutgoingVC」(すなわち、上面図)で行われるアニメーションが正しいように見えます。しかし、ボトムビューは画面サイズの100%とアルファ= 1.0のようにうまくいくように見えますが、それは4x/5xのいずれかに吹き飛ばされ、アルファ0にフェードアウトして見えます。画面が完全に黒くなったら、新しいUIViewController(FirstVC)が画面に正しく表示されます。

私のコードが私が望むように動作しない理由は誰にも見えますか?

ありがとうございます!


愚かな私!ここでは、コードです:

- (IBAction)AddNewScreenPressed:(id)sender 
{ 
    FirstVC *newViewController = [[FirstVC alloc] init]; 
    UIView *currentView = [self view]; 
    UIView *newView = [newViewController view]; 
    [newView setTransform:CGAffineTransformMakeScale(0.25, 0.25)]; 
    [newView setAlpha:0]; 
    [UIView transitionWithView:[self view] 
         duration:10.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         [[self view] addSubview:newView]; 
         [currentView setAlpha:0]; 
         [currentView setTransform:CGAffineTransformMakeScale(5.0, 5.0)]; 
         [newView setAlpha:1.0]; 
         [newView setTransform:CGAffineTransformMakeScale(1, 1)]; 
        } 
        completion:^(BOOL finished){ 
         [[self navigationController] pushViewController:newViewController animated:NO]; 
        } 
    ]; 
} 

答えて

1

あなたはcurrentViewのサブビューとしてnewViewを追加しているので、おそらくあなたはcurrentViewにやっているアニメーションもnewViewに適用されます - それは、おそらく、スケールアップし、同様にそのサブビューのアルファを変更する、など、 newView。 newViewの最初の尺度を0.2にして、newViewの尺度をアニメーションブロックにドロップすることができますか?1.0スケールになるでしょうか?しかし、アルファについて何をすべきか分かりません...

EDITは以下の解決策を見て、うまくいきました。うまく機能しているでしょうか?(あなたが画面上の画像をつかんでとにかく)、別のビューコントロールを持って、トランジションを管理し、2つの画像を渡して内部でアニメーションを行うことができるので、アニメーションなしで前面にプッシュし、アニメーションを最初のビューの画像から開始し、 2つ目のビューのイメージ(コントローラの全体ビューではなく、2つのimageViewで標準アニメーションを行うことができます)を実行したら、2番目のビューコントローラをプッシュします。

+0

これの最終的な解決策は、iOS 5 Betaでセグを使用することでした。私は今はもっとコメントすることができないとは思っていませんが、あなたのEDITは私が実装したものに近い理論です。したがって、あなたの答えは受け入れられます! – mbm29414

1

もう少し遊んだ後、私は1つのこぶを乗り越えて別の障害に会いました。

私はjrturtonの回答をアップしています。なぜなら、問題は確かに私が[self view]に新しいビューを追加していたという事実に関連しているようです。

私はこれを回避するために、[self view]とそのサブビューの間に存在するバッファビュー([self BackView])を追加しました。

- (IBAction)AddNewScreenPressed:(id)sender 
{ 
    FirstVC *newViewController = [[FirstVC alloc] init]; 
    UIView *newView = [newViewController view]; 
    [newView setAlpha:0]; 
    [newView setTransform:CGAffineTransformMakeScale(0.25, 0.25)]; 
    [[self view] addSubview:newView]; 
    [UIView transitionWithView:[self view] 
         duration:1.0 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         [[self BackView] setTransform:CGAffineTransformMakeScale(5, 5)]; 
         [[self BackView] setAlpha:0]; 
         [newView setTransform:CGAffineTransformMakeScale(1, 1)]; 
         [newView setAlpha:1]; 
        } 
        completion:^(BOOL finished){ 
         [newView removeFromSuperview]; 
         [[self navigationController] pushViewController:newViewController animated:NO]; 
         [[self BackView] setTransform:CGAffineTransformIdentity]; 
         [[self BackView] setAlpha:1]; 
        } 
    ]; 
} 

は今、もちろん、私はコントローラをポップ、すなわち、別の問題に遭遇しました:

はその後、その後、コードは、次のことは、新しいビューコントローラをプッシュする作品。

私はそれらをポップすると、アニメーションがうまく動作するようだが、私は終了(完了ブロック)を取得し、次の操作を行います。
[[self navigationController] popViewControllerAnimated:NO];
かさえ:私は結局何
[[self navigationController] popViewControllerAnimatedYES];
withは白い空白の画面です。

私は「プッシュアニメーション」中に何かしていることがこの問題を引き起こしていると仮定していますが、わかりません!助けて!

ありがとうございます!

+0

私は、「公開する」ビューのイメージを取得し、そのイメージ([[UIImageView alloc] initWithImage:highlightedImage:])を使用してアニメートすることで、その後、ポッピングはうまく動作します。 – mbm29414

関連する問題