2012-03-08 7 views
9

は、画面の一端から他端にそれを移動し、私はObjective-Cのに新しいですし、私は画面に画像を追加したい、AS3のようにそれをトゥイーン同時にUIImageの翻訳しますそれ自身の中心点の周りを回転する。アニメイト回転/スケール/

Iは

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
      // TRANSFORM SCREENSHOT 
      screenShotView.transform = CGAffineTransformRotate(screenShotView.transform, -M_PI * 0.05); 
      screenShotView.transform = CGAffineTransformScale(screenShotView.transform, 0.6, 0.6); 
      screenShotView.transform = CGAffineTransformTranslate(screenShotView.transform, 
                    self.webView.frame.origin.x, 
                    self.webView.frame.origin.y - self.webView.frame.size.height * 0.3 
             ); 

と試みたが、このコードを用いて画像がTransformIdentityの中心の周りを回転します。だから、回転しながら移動すると、回転が制御不能になり、画像は私が好きな位置に正確にはありません。

画像を回転中心を翻訳、同時に回転し、翻訳する正しい方法は何ですか?

と、少なくとも変換後、私は、画像の右上隅に閉じるボタンを追加します。そのためにコーナーの新しい座標も必要です。

thnx!

+0

がhttp://www.apeth.com/iOSBook/ch17.html –

+0

これをチェックアウトする価値があるかもしれないそれは...問題は変換で私にとって非常にはっきりしていませんか?または、変換後に右上隅の座標が必要なだけですか? – Saphrosit

+0

申し訳ありませんが、十分明確でない場合。問題は回転が画像の中心の周りにないことです。回転中心は並進とともに移動しないように見えるので、画像の最終位置はその寸法に依存する。その結果、iPadとiPhoneで全体が違って見えます。 – headkit

答えて

16

私は今、次のコードで終わったが、これは技術の解決策の状態であれば、私はまだ知りません。

CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25); 
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformRotate(transform, degreesToRadians(-10)); 

[UIView beginAnimations:@"MoveAndRotateAnimation" context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:2.0]; 

    screenShotView.transform = transform; 

[UIView commitAnimations]; 
+0

はチャームのように働いた!ありがとう – MasterRazer

7

これを行うには、IOS 7の推奨方法はブロックオブジェクトを使用することです。これには、より古くからアニメーション化する方法と比較していくつかの利点があります。特に、マルチコアとビデオの同時処理を利用することができます。また、 '組み込み'のコールバック部分(補完部分)は、必要な状態情報と必要に応じてオブジェクトへのリンクを保持するので、非常に便利です。

CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25); 
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformRotate(transform, degreesToRadians(-10)); 

// animation using block code 
[UIView animateWithDuration:2.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        screenShotView.transform = transform; 
       }completion:^(BOOL finished){ 
        // do something if needed 
       }]; 
関連する問題