2011-07-11 1 views
0

次のコードは、コントローラの独自のビューの上に「リーダー」オーバーレイをポップアップ/その意図は、読者が特定の点で透明なサイズゼロから始めることです。 「ポップアップ」は、不透明度とサイズが増加するにつれてアニメーション化され、アプリケーションフレームの中央の位置に移動します。その後、「ポップダウン」は逆にアニメーション化され、特定の場所に向かって移動しながら後退し、フェードアウトします。iOS/Objective-C:transitionWithViewカスタムアニメーションブロックは、期間が過ぎていなくてすぐにビューのサイズを変更します

ポップアップコードは、まったく同じように機能します。しかし、ポップダウンバージョン(すなわち、isPopup == NOの場合に実行されるコード)は、徐々に行うのではなく、直ちに境界を変更する。したがって、ポップダウンアニメーションは、最初から1ピクセルの正方形のビューをその宛先に向かって移動し、フェードアウトすることを示す。

-(void)popupReader:(BOOL)isPopup from:(CGPoint)loc { 
    CGFloat newAlpha = 0.0f; 
    CGPoint newCenter = CGPointZero; 
    CGRect newBounds = CGRectZero; 
    CGRect appFrame = [UIScreen mainScreen].applicationFrame; 

    CGSize readerSize = [self viewSize]; 
    if (isPopup) { 
     newAlpha = 1.0f; 
     newCenter = CGPointMake(appFrame.origin.x+appFrame.size.width/2, 
           appFrame.origin.y+appFrame.size.height/2); 
     newBounds = CGRectMake(0,0,readerSize.width,readerSize.height); 

     [self.view setAlpha:0.0f]; 
     [self.view setCenter:loc]; 
     [self.view setBounds:CGRectMake(0, 0, 0, 0)]; 
    } else { 
     newCenter = loc; 
     newBounds = CGRectMake(0,0,1,1); 
    } 

    const CGFloat animDur = 0.3f;  
    [UIView transitionWithView:self.view 
         duration:animDur 
         options:UIViewAnimationOptionTransitionNone|UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
     self.view.alpha = newAlpha; 
     self.view.center = newCenter; 
     self.view.bounds = newBounds; 
     } 
     completion:nil]; 
} 

境界線と中心ではなく、フレームだけをアニメーション化しようとしましたが、結果は同じでした。

これはなぜ起こっているのか、誰がこの問題を克服できるのかを知っていますか?

お時間をありがとうございました。ドキュメントから

答えて

2

UIViewAnimationOptionTransitionNone - 何の遷移が発生しないように指定するオプション。

UIViewAnimationOptionTransitionFlipFromLeft 
UIViewAnimationOptionTransitionFlipFromRight 
UIViewAnimationOptionTransitionCurlUp   
UIViewAnimationOptionTransitionCurlDown  

編集

のいずれかを試してください それとも、単にそれらの値をアニメーション化する探しているなら、

[UIView animateWithDuration:(NSTimeInterval)duration 
       animations:(void (^)(void))animations 
       completion:(void (^)(BOOL finished))completion]; 
+0

ありがとうbshirleyを試し、animateWithDurationアプローチはしていません奇妙な問題を十分に修正してください。しかし、トランジションを使用して修正します:)本当にありがとうございました! – KomodoDave