2012-01-21 11 views
2

UIViewに複数のトランスフォームを適用する方法について質問があります。たとえば、その中心点の周りのUIViewの回転をアニメーション化し、その外側の点を中心に回転させようとすると、2番目のアニメーションがすべて乱されます。指定したものとはまったく異なる方法で回転したり回転したりします。最初のアニメーションが2番目のアニメーションに影響しないようにするにはどうすればよいですか?2番目のアニメーションが再生されるときにはまだ存在しますか?シーケンシャルUIView変換

編集:ここにコードがあります。私は回転層になりたいので

CALayer *layer = view.layer; 

CATransform3D aTransform = CATransform3DIdentity; 
CGFloat zDistance = 2000; 
aTransform.m34 = 1.0/-zDistance; 
tileScrollView.layer.sublayerTransform = aTransform; 

CGFloat subviewX = ((1/view.frame.size.width)*(view.frame.origin.x)); 
CGFloat subviewY = 0.5; 
[self setAnchorPoint:CGPointMake(-subviewX, subviewY) forView:view]; 

CATransform3D bTransform = layer.transform; 
CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"]; 
rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform]; 
bTransform = CATransform3DMakeRotation(-M_PI_2, 0, 1, 0); 
rotateAnim.duration=0.2; 
rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform]; 
layer.transform = bTransform; 
[layer addAnimation:rotateAnim forKey:nil]; 

CALayer *layer = view.layer; 

CATransform3D aTransform = CATransform3DIdentity; 
CGFloat zDistance = 2000; 
aTransform.m34 = 1.0/-zDistance; 
scrollView.layer.sublayerTransform = aTransform; 

CGFloat subviewX = 0.5; 
CGFloat subviewY = 0.5; 
[self setAnchorPoint:CGPointMake(subviewX, subviewY) forView:view]; 

CATransform3D bTransform = CATransform3DIdentity; 
CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"]; 
rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform]; 
bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 1, 1, 0); 
rotateAnim.duration=0.05; 
rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform]; 
layer.transform = bTransform; 
[layer addAnimation:rotateAnim forKey:nil]; 

今すぐ層が回転していることを、私は左画面の境界線の周りにそれを反転したい:まず、私はその周りのビューは、中心ポイントの回転します2番目のアニメーションの先頭にCATransform3D bTransform = CATransform3DIdentityの代わりにCATransform3D bTransform = layer.transformを置きますが、もう一度アニメーションを上げるだけです。

もう1つの同様の問題は、9つのサブビューを含むUIViewがあることですフリップアローンそれは毎秒中心点です。しかし、これらの9つのUIViewのスーパービューに変換を適用するたびに、サブビューのレイアウトが乱れてしまいます。誰もこれを防ぐ方法を知っていますか?どんな助けでも大歓迎です。前もって感謝します!

+2

コードを表示します。 –

+0

ビューをアニメーション化するにはいくつかの方法がありますので、私たちにあなたが何をしているのか分かりません。 –

答えて

2

2つのこと:あなたは、xとy軸と45°の軸を中心に回転することを意味

bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 1, 1, 0); 

:最初の変換で

  1. 、あなたがこれを行います。それはあなたがしようとしているものかもしれませんが、それは奇妙に思われます。あなただけの現在の変換に変換を追加したい場合は、第2ステップで

    bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 0, 1, 0); 
    
  2. に変更することを検討してください(すなわち、別の180°回転)、あなたはこの行にまで

    bTransform = CATransform3DMakeRotation(-M_PI_2, 0, 1, 0); 
    

    を変更する必要があります

    bTransform = CATransform3DRotate(bTransform, -M_PI_2, 0, 1, 0); 
    

    これは、現在のトランスフォームを無視するのではなく、既存のトランスフォームに変換を適用します。

関連する問題