2

私はiOSアニメーションにかなり慣れていないので、CGAffineTransformを使用して2つの画像間のトランジションとUIImageViewの翻訳アニメーションを組み合わせることができるかどうか疑問に思っています。

つまり、アニメーション化する2つの画像があり、同時に翻訳を適用して、2つの画像間を行き来しながら、全体がページ上を移動するようにします。

CGAffineTransformConcatを適用して、CGAffineTransformTranslateなどの2つのCGAffineTransformを組み合わせることができることはわかっています。しかし、別のUIImageに移行できるCGAffineTransformが表示されません。

画像間でアニメーション化するために私が知っている唯一の方法は、UIImageViewanimationImages配列をstartAnimatingと組み合わせて使用​​することです。しかし、これを次のような翻訳と組み合わせる方法がわかりません。

UIImageView* textView = [[UIImageView alloc] initWithFrame:bunnyImage.frame]; 

textView.animationImages = [NSArray arrayWithObjects:    
                            [UIImage imageNamed:@"bunnyclose.png"],
                            [UIImage imageNamed:@"bunnytalk.png"],
                            nil];

textView.animationDuration = 1.0;
textView.animationRepeatCount = 8;
[textView startAnimating];

[self.view addSubview:textView];    

助言がありますか?

4

1 に答える 1

2

私自身の質問への回答として、 「ビュー間のアニメーション遷移の作成」で説明されているブロック アニメーション関数transitionFromView:toView:duration:options:completionは、私が思いついた最良のソリューションです。これを使用して画像間をアニメーション化します。これはブロック アニメーションanimateWithDuration:delay:options:animations:completion: CGAffineTransformTranslate を使用するか、アニメーションで説明されているように UIImageViewの中心を変更するだけで組み合わせることができます。

元のコードブロックを作り直し、翻訳を追加すると、次のようになります。

UIImageView* bunny2View = [[UIImageView alloc] initWithFrame:bunny2Image.frame]; 


[UIView 
 transitionFromView:bunny2Image 
 toView:bunny2View 
 duration:10.0 
 options:UIViewAnimationOptionShowHideTransitionViews 
 completion:^(BOOL finished) {
     [UIView 
      animateWithDuration:dur 
      animations:^(void) {
          CGPoint center = bunny2Image.center;
          center.y += deltay;
          bunny2Image.center = center;
          bunny2View.center = center;
      }
      completion:^(BOOL finished) {

          [UIView 
           transitionFromView:bunny2View 
           toView:bunny2Image 
           duration:10.0 
           options:UIViewAnimationOptionShowHideTransitionViews 
           completion:nil];
      }];
 }]; 

まだ作業中ですが、これが私がこれまでに思いついたことです!

于 2012-04-19T15:36:59.253 に答える