2011-11-08 18 views
0

私は簡単なアニメーションをしようとしています。私はそれに2つのビューを持っているUIViewControllerを持って、それはメインビューのサブビューです。 (Interface Builderでは、UIViewControllerテンプレートから.xibで自動的に作成されるビューのサブビューの2つのUIViewオブジェクトを作成しました)。私はIBに隠された第2のビューを持っています。 View ControllerはUIModalPresentationFormSheetとしてモーダルに表示されます。ボタンを押すと、最初のビューを非表示にし、2番目のビューに移動します。私はここでの次のAppleの例を試してみました:ボタンが押されたときにここでhttp://developer.apple.com/library/ios/#samplecode/ViewTransitions/Listings/Classes_ViewTransitionsAppDelegate_m.html#//apple_ref/doc/uid/DTS40007411-Classes_ViewTransitionsAppDelegate_m-DontLinkElementID_4Appleの例に従ったUIViewの非表示/表示のアニメーション

は私のコードです:

CATransition *transition = [CATransition animation]; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.duration = 0.75; 
    transition.type = kCATransitionReveal; 
    [self.view.layer addAnimation:transition forKey:nil]; 
    self.FirstScreen.hidden = YES; 
    self.SecondScreen.hidden = NO; 

残念ながら、私は任意のアニメーションを得ることはありません。私は、私が望むが、非表示/非表示を取得しますが、アニメーションの遷移はありません。だから私の最初の質問は、私はコードで間違っているのですか?

サイドの質問は、ブロックでこれを行うことができますか?私はアルファを変えるようなブロックで単純なアニメーションをいくつかやった。

[UIView animationWithDuration... ] 

しかし、上記のトランジションをどのようにしてブロックで行うのか分からなかった。

答えて

1

代わりのhiddenプロパティをアニメーションはアニメーション化しよう:

self.FirstScreen.alpha = 0.0; 
self.SecondScreen.alpha = 1.0; 

または

self.FirstScreen.layer.opacity = 0.0; 
self.SecondScreen.layer.opacity = 1.0; 

ここから - UIViewクラスのUIView Class Reference

次のプロパティがアニメーション可能です:

@property frame 
@property bounds 
@property center 
@property transform 
@property alpha 
@property backgroundColor 
@property contentStretch 

別の解決策:

[UIView animateWithDuration:0.75 delay:0 
       options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         self.FirstScreen.alpha = 0.0; 
         self.SecondScreen.alpha = 1.0; 
        } 
        completion:nil]; 
+0

私はアルファの不透明度を試してみましたが、残念ながらそれは動作しません。ビューはUIModalPresentationFormSheetとして表示されるためですか? – Crystal

+0

良い。最初は、あなたのアニメーションは、この行の1つのビューにのみ適用されます - '[self.view.layer addAnimation:transition forKey:nil];'。そして、このビューは 'self.view'でしょう。この行の前に 'self.view.layer.opacity = 0.0;'を入れて、あなたは効果を見ることができます。このアプローチの不利な点は、アニメーション化された1つのビューだけです。あなたの目的に最も適した方法は、ブロックでアニメーションを使うことです。待ってください、私は私の答えを更新します。 – beryllium

+0

あなたのブロックを理解し、それがなぜ他の場合に起こるのか理解してから、他の場所で間違っているものでなければなりませんが、残念ながらここでは動作しません。 – Crystal

関連する問題