2011-12-27 4 views
4

私のアプリケーションのメインビュー(画面中央の正方形)に含まれるビューを持っています。あなたが左にスワイプする場合、私は、右に画面オフビューをスライドし、次のコードを書いている:これは素晴らしい作品UIViewの画面を右に動かし、左からもう一度表示する方法

- (IBAction)swipeLeft:(id)sender 
{ 
    CGRect initCardViewFrame = self.cardView.frame; 
    CGRect movedCardToRightViewFrame = CGRectMake(initCardViewFrame.origin.x + 1000, initCardViewFrame.origin.y, initCardViewFrame.size.width, initCardViewFrame.size.height); 

    [UIView animateWithDuration:0.7 
        animations:^{self.cardView.frame = movedCardToRightViewFrame;} 
        completion:nil]; 
} 

、しかし私は、コードを延長したいよう平方一度画面の右側から消えて、左から右に戻って中央に戻ります。私は本当にどのようにウィンドウの外側の左側にそれを "再描画"し、それを真ん中に戻すのかは分かりません。私はフレームをやり直そうとしましたが、アニメーションはアニメーションブロック内の最後のフレームの動きしか表示しません。私は、画面からビューを押して、画面の左手の外側にそれを描き直し、中央にスライドさせる必要があると仮定しています。もちろん、それを行うより直感的な方法がない限り。

更新:

私は、以下のこの質問に答えてきましたが、私は助けるが、互いの内側のUIViewのアニメーションをネストせずにこれを行うには良い方法があると考えることはできません。これがこの問題に取り組む唯一の方法ですか?

答えて

4

私は、「完了」パラメータ内で次のコードを追加してしまった:

completion:^(BOOL finished) 
{ 
    self.cardView.frame = moveCardToLeftViewFrame; 

    [UIView animateWithDuration:0.4 
        animations:^{self.cardView.frame = initCardViewFrame;} 
        completion:nil]; 
}]; 

注* moveCardToLeftViewFrameは可視ウィンドウの左側にあるビューを配置しますCGRectです。右にスライドした後、画面の外側に配置され、次に中央にスライドします。

+0

これはあなたが望む結果を得るための最良の方法です。入れ子にされたアニメーションは醜い(インデント地獄です!)が、あなたが望むことを行う最も簡単な方法です。 – jrturton

0

あなたは場合には、このコードを使用することができます。

  1. ビューが左に画面から出て行くと、右サイドからの取得します。
  2. ビューは、画面を右に移動し、左から取得します。

コードはsniped:

- (void)animateViewWithTransformation:(MyEnumAnimationTransformation)animationTransformation withDuration:(CGFloat)duration { 
    CGFloat goOutOffScreenToX, cameInToScreenFromX; 
    switch (animationTransformation) { 
     case goOutToLeftGetInFromRight: 
      goOutOffScreenToX = -1 * [UIScreen mainScreen].applicationFrame.size.width; 
      cameInToScreenFromX = [UIScreen mainScreen].applicationFrame.size.width; 
      break; 
     case goOutToRightGetInFromLeft: 
      goOutOffScreenToX = [UIScreen mainScreen].applicationFrame.size.width; 
      cameInToScreenFromX = -1 * [UIScreen mainScreen].applicationFrame.size.width; 
      break; 
     default: 
      break; 
    } 

    CGRect originViewFrame = self.frame; 
    [UIView animateWithDuration:duration 
        animations:^{[self setX:goOutOffScreenToX];} 
        completion:^(BOOL finished) 
           { 
            [self setX:cameInToScreenFromX]; 
            [UIView animateWithDuration:duration 
                animations:^{[self setX:originViewFrame.origin.x];} 
                completion:nil]; 
           }]; 
} 
関連する問題