2017-01-06 14 views
0

私は画面にAVCaptureVideoPreviewLayerを持っています。ユーザーがボタンをタッチした直後にその位置を変更したい。AVCaptureVideoPreviewLayerの位置を即座に変更します。

次のコードを使用して位置を変更できますが、瞬時には発生しませんが、なんらかの滑らかなライナー遷移があります。

CGRect frame = self.preview.frame; 
frame.origin.x = previewLeft; 
frame.origin.y = previewTop; 
self.preview.frame = frame; 

固有のアニメーションを使用せずに位置を変更するにはどうすればよいですか?

答えて

0

なぜそれが起こっているのかわかりません。 CALayerとそのサブクラスは暗黙的にframeの変更をアニメーション化しません。それは暗黙のうちにpositionをアニメーション化していますが、私は内部モデルの変更がアニメーションを引き起こしたとは思いませんでした。ドキュメントから

フレームプロパティが直接アニメーション可能ではありません。代わりに、目的の結果を得るために、bounds、anchorPoint、およびpositionプロパティの適切な組み合わせをアニメートする必要があります。

フレームの変更は、positionを設定するだけです。

にかかわらず、あなたは一時的にすべてのアクションを抑制することができます。

スウィフトコード:

CATransaction.begin() 
CATransaction.setDisableActions(true) 

self.preview.frame = frame; 

CATransaction.commit() 

Objective-Cのコード:

[CATransaction begin]; 
[CATransaction setDisableActions:YES]; 

self.preview.frame = frame; 

[CATransaction commit]; 
+0

は1が動作しますが、他のではないだろうと奇妙に思えます。私がCAレベルにいるとき、私は決して 'フレーム 'で回り込むことはありません。 – LucasTizma

+0

私はあなたが正しいとは思わない。 'frame' **がアニメーションをトリガーする**という理由だけでアニメーション化できるわけではありません。それは単なる副作用であり、実際には、「位置」は暗黙のうちにアニメーション化されているものです。私は答えにドキュメントノートを掲載しました。 – LucasTizma

+0

'frame'プロパティがあります。それは計算されたプロパティだからといって、プロパティの量を少なくしていないからです... – LucasTizma

関連する問題