2012-03-23 4 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

안녕하세요. 그것은 두 번째 라인을 변경 제안 코드의 약간의 변화와 함께 : self.label.layer.frame = CGRectMake (originalLabelsOrigin.x, originalLabelsOrigin.x, 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]; 
} 

아직 너무 확실하지하지만 그것은 작동합니다.

관련 문제