CGAffineTransformMakeRotation против часовой стрелки всегда

Я пытаюсь оживить UIImageView чтобы вращаться против часовой стрелки, когда пользователь прикасается к нему и перемещает палец на него по часовой стрелке.
В принципе, я хочу, чтобы UIImageView возвращался в исходное положение после того, как касание заканчивается, и оно должно двигаться в направлении против часовой стрелки.

Проблема в том, что каждый временной угол (в градусах) больше 180, тогда изображение поворачивается по часовой стрелке обратно в исходное положение. По-видимому, он берет кратчайший путь назад. Что касается углов 179 градусов или меньше, изображение вращается против часовой стрелки (что мне нужно).

Я пробовал оба эти кода, и они ведут себя одинаково. Какие-либо предложения?

ПРИМЕЧАНИЕ: здесь переменная угла является двойной и ее инициализируется равной нулю, и она остается 0 во всем моем коде

 -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self handleObject:touches withEvent:event isLast:YES]; /* this doesn't make rotation counter clockwise for rotations greater than 180 */ [UIView beginAnimations:nil context:NULL]; [UIView setAnimationCurve: UIViewAnimationCurveLinear]; [UIView setAnimationDuration:1.0]; [UIView setAnimationRepeatCount:1]; CGAffineTransform transform = CGAffineTransformMakeRotation(angle); circle1ImgVw.transform = CGAffineTransformRotate(transform, angle); // ends animation [UIView commitAnimations]; /* this doesn't make rotation counter clockwise for rotations greater than 180 */ [UIView animateWithDuration:1.0 animations:^{ circle1ImgVw.transform = CGAffineTransformMakeRotation(angle); }]; } 

Я попытался изучить этот пост, и есть пара проблем с ним

  • Я больше не могу касаться и поворачивать изображение после завершения анимации
  • Он всегда анимируется по часовой стрелке, и я не смог понять, как сделать его плавным против часовой стрелки с точки, где пользователь закончил вращение изображения.

2 Solutions collect form web for “CGAffineTransformMakeRotation против часовой стрелки всегда”

У меня была аналогичная проблема, проверьте принятый ответ, это может помочь вам:

Поверните UIView по часовой стрелке для угла более 180 градусов


В ответ на комментарии, возможно, это поможет:

В моем коде я фактически использую

 rotationAnimation.fromValue rotationAnimation.toValue 

вместо

 rotationAnimation.byValue. 

Вращение всегда будет против часовой стрелки, если значение toValue меньше, чем значение fromValue. Не имеет значения, являются ли ваши положительные или отрицательные значения, а только отношения между ними.

Выясните, каков ваш начальный угол, выясните, в каком направлении вы хотите повернуть, и выяснить, каков ваш конечный угол. Убедитесь, что он меньше начального угла, если вы хотите идти против часовой стрелки. Вот код, который я использую для анимации часовой стрелки по часовой стрелке с 12:00 до текущего времени.

 -(void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self updateClockArmAngle]; } - (void)updateClockArmAngle { // Get the time NSDate *date = [NSDate date]; NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; [calendar setTimeZone:[NSTimeZone timeZoneWithName:@"America/Toronto"]]; NSDateComponents* components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:date]; CGFloat hour = [components hour]; CGFloat angle = (hour/24.0)*(2*M_PI); CGFloat minute = [components minute]; angle += (minute/(24*60))*(2*M_PI); [self rotateViewAnimated:self.clockArm withDuration:1.5 byAngle:angle]; } - (void) rotateViewAnimated:(UIView*)view withDuration:(CFTimeInterval)duration byAngle:(CGFloat)angle { CABasicAnimation *rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; rotationAnimation.fromValue = 0; rotationAnimation.toValue = [NSNumber numberWithFloat:angle]; rotationAnimation.duration = duration; rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; [rotationAnimation setRemovedOnCompletion:NO]; [rotationAnimation setFillMode:kCAFillModeForwards]; [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; } 

Техника, которую я использовал, состоит в том, чтобы разделить угол поворота на 2 и разделить вращение на две отдельные анимации, связанные параметром completion: animateWithDuration:delay:options:animations:completion: Но, поскольку представление повернуто к его текущему положению, вам нужно начать с этой позиции и «отключить» до нуля, а также пытаться повернуть CCW с нуля.

  • Повторное использование UITableViewCell: отображение ячейки неверно - повторное использование не ожидается
  • Отправка приложения iPhone - ошибка ITMS-90171 Недопустимая структура пакета не может содержать автономные исполняемые файлы
  • Транзитивные зависимости от Cocoa Pod
  • Обнаружение лица UIImage
  • Ошибка использования Parse - «_OBJC_CLASS _ $ _ ParseClientConfiguration», на которую ссылаются:
  • Ошибка утверждения в UICollectionView?
  • Список шрифтов, предоставляемых приложением (iOS)
  • Курсив в раскадровке в атрибутном тексте не работает
  • Метод uniqueIdentifier] больше не разрешен, мне нужна альтернатива
  • Установка новых и старых версий Xcode
  • Как изменить изображение контроля порядка на ios 7
  • Interesting Posts

    Быстрые проблемы с сеттерами и геттерами

    ios 10 youtube iframe не играет

    SWRevealViewController nib cell не выполняет segue

    UITableView ячейка с двойным щелчком должна перейти в предыдущее состояние

    iOS: видео как текстура GL с альфа-прозрачностью

    iOS Множественное сохранение объектов разбора с индикатором выполнения

    Создание системы создания / авторизации пользователя для Интернета и мобильных устройств, которая использует как электронную почту, так и facebook_id

    Есть ли риск обновления до Xcode 9 во время работы над проектами, которые будут выпущены в ближайшее время?

    Содержимое NSArray не отображается в списке наблюдения переменных отладчика в Xcode 6.1

    Как сделать Crash resistant ios apps

    Получение отклика при попытке извлечь данные из базы данных Firebase

    Попытка экспортировать в csv, но как я могу реализовать делегат?

    LinkedIn SDK ios swift

    secItemCopyMatching возвращает данные nil

    Retina iPhone не работает с отзывчивым Twitter Bootstrap

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.