2012-03-23 8 views
0

こんにちは私は右下点(時計針のような)でコントロールを回転させたいと思います。右端のボトム点でコントロールを回転する

self.label.layer.anchorPoint = CGPointMake(1.0, 1.0); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:2]; 
self.label.transform = CGAffineTransformMakeRotation(M_PI/2); 
[UIView commitAnimations]; 

しかし、ここでの問題は、私のラベルはx軸上のビットが左にして、回転させるようにシフトしていることである:私は次のコードでそうすることができますよ。私は何が間違っているか分からない..助けてください。

同様のポスト:iPhone, How do I rotate an UIImageView around a point using Core Animation and CATransform3D?

答えて

0

私はこのような状況でやっていることはアニメーションブロックに先立っ上のラベルを移動しています。たとえば、アンカーポイントをCGPoint 1.0,1.0に変更する場合は、アニメーションの前にそのラベルにトランスフォームを適用するだけです。複数の変換を実行する予定がある場合でも、viewDidLoad内の参照ポイントを元の場所に保存することができます。 *コードは実際にはコンパイルされていませんが、これは良いアイデアを与えるはずです。

- (void)viewDidLoad 
{ 
    // CGPoint originalLabelsOrigin is declared as a property 
    originalLabelsOrigin = self.label.frame.origin; 
} 

self.label.layer.anchorPoint = CGPointMake(1.0, 1.0); 
self.label.layer.frame = CGRectMake(originalLabelsOrigin.x + self.label.frame.size.width, originalLabelsOrigin.y + self.label.frame.size.height, self.label.frame.size.width, self.label.frame.size.height); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:2]; 
self.label.transform = CGAffineTransformMakeRotation(M_PI/2); 
[UIView commitAnimations]; 
+0

ありがとうございました!それはうまくいきましたが、提案されたコードのわずかな変更で2行目が次のように変更されました:self.label.layer.frame = CGRectMake(originalLabelsOrigin.x、originalLabelsOrigin.y、self.label.frame.size.width、self.label.frame.size 。高さ); – Amit

+0

一般的な考え方は、アンカーポイントを移動するのと同じ量だけビューを移動することです(オブジェクトがどこから回転するか、view.frame.size.width/2&view.frame.size.height/2は死んだ中心になります) )。 CGPoint値を使って乗数を設定することもできます。たとえば、xとyの変数を作成し、ビューの対応するフレームサイズでそれらの値を掛け、その値を使用します。そうすれば、毎回正確な金額に移動します。答えがあなたのために働いた場合は、解答にコメントを付けてマークしてください。ここでいくつかの点を説明し始めます。 ;-) –

0

だから、最終的に私は大尉によって示唆されているように、次のコードによって達成することができる尋ね:理由と

- (void)viewDidLoad 
{ 
// CGPoint originalLabelsOrigin is declared as a property 
originalLabelsOrigin = self.label.frame.origin; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
self.label.layer.anchorPoint = CGPointMake(1.0, 1.0); 
self.label.layer.frame = CGRectMake(originalLabelsOrigin.x, originalLabelsOrigin.y,   self.label.frame.size.width, self.label.frame.size.height); 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:2]; 
self.label.transform = CGAffineTransformMakeRotation(M_PI/2); 
[UIView commitAnimations]; 
} 

まだあまりわからないが、それは動作します。

関連する問題