3

私はUIImageViewを持っていますKen Burnsのようなパン/ズームをアニメーション化しようとしています。私は、顔の中心(具体的には、人の鼻の終わり)を中心にして、イメージのフルサイズにズームアウトしたいと考えています。鼻の座標の先端が、私がするとき、アニメーション、実際に鼻の上に画像を中央に上記のコードにパンチしなければならなかった値とは全く異なるているPhotoshopでiOS:Ken Burnsアニメーションの実装に予期しないパラメータが必要です

image.frame = // some frame that zooms in on the image; 
image.center = // tip of the nose 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:3]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

image.frame = // original frame 
image.center = // original centerpoint 

[UIView commitAnimations]; 

:コードのようなものです開始されます。私は軸を反映させ、スケールの倍数を乗算してみました...そして、なぜ私がPhotoshopから推測したものであるのか、なぜiOSの数字が重要であるのか分かりません。

誰かが2つの座標系の相違を指摘できますか?

いくつかの追加情報:

  • imageはUIImageViewで、水平方向を向いているのUIViewController
  • サイードのUIViewControllerの直接の子である - 全体のアプリは、ランドスケープモードで実行されます。
+0

ここでiOS用のケン・バーンズエフェクトのためのまともなライブラリがあります:https://github.com/jberlana/iOSKenBurns それは少し仕事を使用することができますが。 – shim

答えて

3

フレームとセンターの両方を設定すると少し冗長です。フレームは十分なはずですが、両方を使ってセットアップの一部を失います。

編集:より正確には、CoreAnimationをセットアップして残りの処理を行うフレームを2つだけ用意する必要があります。

2

問題は、アニメーションが複雑なやり方で起こるということです。どれくらい正確ではありませんが、結果はこれに関係します。 1つの方法で初期パラメータを設定してアニメートすることはできません。初期パラメータを設定してから、[self performSelector:withObject:afterDelay:]メッセージをアニメーションが行われる場所(すべての[UIView *アニメーション]メッセージ)に送信する必要があります。

コードは次のようになります。

- (void)one { 
    image.frame = // some frame that zooms in on the image; 
    image.center = // tip of the nose 

    [self performSelector:@selector(two) withObject:nil afterDelay:0]; 
} 

- (void)two { 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:3]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

    image.frame = // original frame 
    image.center = // original centerpoint 

    [UIView commitAnimations]; 
} 
関連する問題