iOS — поворот UIImageView на основе ориентации X, Y

#ios #uiimageview #trigonometry

#iOS #uiimageview #тригонометрия

Вопрос:

Я подклассировал UIView как объект-аватар, который содержит значок (UIImageView), имя (UILabel) и идентификатор (UILabel). В зависимости от ориентации координат X, Y я хочу, чтобы значок был повернут. Например, скажем, ориентация.X = 1 и ориентация.Y = 1 даст угол 45 градусов. X и Y могут быть любыми между -1 и 1.

Я не уверен, как это вычисляется математически, и API cocoa не вызывает его. Есть идеи, с чего начать?

Ответ №1:

для плавности я добавил анимацию:

 - (void)rotateView:(UIView *)view withDuration:(NSTimeInterval)duration andRadians:(CGFloat)radians
{
    // Setup the animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix
    CGAffineTransform transform = CGAffineTransformMakeRotation(radians);
    view.transform = transform;

    // Commit the changes
    [UIView commitAnimations];

}
 

Редактировать:

для других углов вам необходимо создать собственную матрицу вращения.

Как работает матрица вращения

Прочитайте здесь, как создать пользовательское аффинное преобразование в Objective-c

Надеюсь, это поможет.

Комментарии:

1. Я не хочу, чтобы изображение поворачивалось вокруг центра, поскольку оно портит изображение

2. Я добавил свой пост, надеюсь, это поможет.

Ответ №2:

Вам нужно изучить тригонометрические функции — в частности acos , и asin .

Эта статья может быть полезной.