Как повернуть вид вокруг точки привязки несколько раз
Я действительно озадачен проблемой, которую я имею с вращением представления. Я пытаюсь заставить несколько видов вращаться вокруг произвольной точки (как прикосновение).
Прежде всего, без полного объяснения (просто поверьте мне на слово), я просто хотел бы сказать, что из-за сложности моего макета представления и того, что мне нужно сделать, метод "читерства", как его иногда называют, где Вы добавляете все виды, которые нужно повернуть, к большему виду и повернуть его, у меня не получится.
Я изменяю опорную точку слоя, чтобы мои виды вращались вокруг точки двойного касания. Однако, кое-что, что я не могу понять, продолжает бросать меня в тупик. Когда я поворачиваю его один раз (скажем, на 90º) и снова поворачиваю на 90º, вместо того, чтобы оказаться на 180º (что вы ожидаете), я получаю на 270º (или другое странное число).
Я постараюсь опубликовать достаточно кода, чтобы вы могли видеть, что я говорю (и, надеюсь, поможет мне).
У меня есть одна переменная экземпляра, объявленная в.h
UIView *theView;
Вот.m (вам нужно будет импортировать платформу QuartzCore)
- (void)viewDidLoad {
[super viewDidLoad];
theView = [[UIView alloc]initWithFrame:CGRectMake(140, 40, 40, 40)];
theView.backgroundColor = [UIColor blueColor];
[self.view addSubview:theView];
}
#define DegreesToRadians(x) ((x) * M_PI / 180.0)
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInView:self.view];
if ([touch tapCount]==2) {
CGFloat xValue = ((touchLocation.x - theView.frame.origin.x)/theView.frame.size.width);
CGFloat yValue = ((touchLocation.y - theView.frame.origin.y)/theView.frame.size.height);
CGRect priorRect = theView.frame;
theView.layer.anchorPoint = CGPointMake(xValue, yValue);
theView.frame = priorRect;
static float rotationValue = 0.0f;
rotationValue += 90.0f;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
theView.transform = CGAffineTransformRotate(theView.transform, DegreesToRadians(rotationValue));
[UIView commitAnimations];
}
}
Я пробовал это с каждой другой конфигурацией, о которой я мог подумать, так что этот пример - то, что я бросил вместе, потому что он казался довольно сжатым. В любом случае, ПОЖАЛУЙСТА, ПОМОГИТЕ МНЕ!!!
1 ответ
Точка привязки должна быть установлена соответствующим образом.
Установка точки привязки для слоя UIView
Если вы хотите повернуть только на 90 градусов крана, то не объединяйте вращение, оно всегда должно быть на 90 градусов.
Если вы хотите, чтобы он каждый раз вращался на большую величину, у вас возникнут проблемы с перескоком, поэтому вы должны увидеть следующую ссылку, чтобы узнать, как это сделать правильно.