5

ここに私のアニメーションコードです:CATransformLayerは暗黙のアニメーションをサポートしていませんか?

CGFloat zDistance = 850; 
CGFloat scaleFactor = BACK_COVER_WIDTH/self.transformLayer.bounds.size.width; 
CATransform3D rotation = CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0); 
CATransform3D scale = CATransform3DMakeScale(scaleFactor, scaleFactor, 0.0); 
CATransform3D transform = CATransform3DConcat(rotation, scale); 
transform.m34 = 1.0/-zDistance; 
CGPoint location = CGPointMake(CGRectGetMidX(self.layer.frame), CGRectGetMidY(self.layer.frame)); 
[CATransaction begin]; 
[CATransaction setAnimationDuration:1.0]; 
self.transformLayer.transform = transform; 
self.transformLayer.position = location; 
[CATransaction commit]; 

self.transformLayerは2つのサブレイヤ、フロント用と背面に1つ(私は「フリップ」効果を作成しています)とCATransformLayerです。しかし、このコードはアニメーションなしで位置とトランスフォームを設定するだけです。だから、transformは暗黙的なアニメーションをサポートしていない可能性があるので、私はそれを取り出して位置を設定しようとしましたが、どちらもアニメーション化されませんでした(そして暗黙のアニメーションをサポートしていることは確かです)。

私は何か間違っているのですか、CATransformLayerは暗黙のアニメーションをサポートしていませんか?ドキュメントは、それをサポートしていないことについて何も言わないので、私はそれを仮定しています。

編集:これは、Mac OS X用で、iOSの

+0

明示的なアニメーションを試しましたか? –

答えて

1

デビッドダンカンの回答hereは、明示的なアニメーションを使用して終了しましたが、この問題を抱えている他の人にとって正しい方向へのステップのようです。

0

暗黙のアニメーションは、UIView Sに関連付けられたすべての層のために無効になっていません。あなたが詳細について興味があるなら、私はもっと多くのdetailed responseを持っています。しかし、要するに、ビューに関連付けられたレイヤー上のアニメーションが必要な場合は、明示的に行う必要があります(-addAnimation:forKey:を使用してCAAnimationオブジェクトを添付)。

編集:この質問はOS X用であり、CATransformLayerは実際にはサブレイヤです。この回答は無視してください(ただし、リンクされた回答はまだiOSに役立ちます)。

+0

これはiOS、Mac OS X用ではありません。変換レイヤーはビューのレイヤーのサブレイヤです(ビューはレイヤービューを表示します)。 – indragie

+0

あああ。その場合、私は知らない。ごめんなさい。 –

0

CATransformLayerのサブレイヤだけがレンダリングされます。だから私の推測では、そのtransformプロパティは決して適用されないということです。代わりにsublayerTransformプロパティを設定しようとしましたか?とにかくそれがあなたのために起こっているようです。

+0

質問によると、彼のコードは変換を設定しますが、単にアニメーション化されません。 –

+0

私は何とかそれを逃した。おそらく 'CATransformLayer'はそのプロパティのアニメーション化をサポートしていませんか? –

0

レイヤーを追加して同じ実行ループでアニメーションしようとすると、アニメーションは発生しません。瞬時に実行されます。 CATransactionにレイヤーを追加する必要があります。その後、暗黙的または明示的にアニメートできます。たとえば、これが動作するはずです:

[CATransaction begin]; 
[self.view.layer addSublayer:transformLayer]; 
[CATransaction commit]; 

// implicit animation will now occur because we're in the next run loop 
transformLayer.transform = newTransform; 
関連する問題