Поворот регулятора в его крайней правой нижней точке - PullRequest
0 голосов
/ 23 марта 2012

Привет, я хочу повернуть регулятор в правой нижней точке (как стрелка часов). Я могу сделать это с помощью следующего кода:

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, Как мне повернуть UIImageView вокруг точки, используя Core Animation и CATransform3D?

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Итак, наконец, то, что я спросил, может быть достигнуто с помощью следующего кода, предложенного капитаном:

- (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]; 
} 

Все еще не совсем уверен с причиной, но это работает.

0 голосов
/ 23 марта 2012

Что я делаю в этой ситуации, так это перемещаю метку до блока анимации. Например, если вы меняете свою опорную точку на 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]; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...