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 с нуля.

  • Xcode - область поиска для исключения файлов или путей
  • XCode 6.3 Beta показывает, что устройство iOS 8.3b является «неприемлемым»,
  • Как получить ориентацию по умолчанию LandscapeLeft в iOS5?
  • Автозаполнение для ведущей точки не работает в быстрой
  • ландшафтный режим не работает должным образом в игре spritekit
  • как проверить valueOfKey - это массив или объект, когда мы получаем его от json в ios
  • Сохранить модели данных ядра в Xcode 4
  • SBAppTags ключ, чтобы скрыть приложение iOS с главного экрана, не работает в iOS8
  • Обнаружение неиспользуемых методов iOS
  • Интервал между UILabel
  • Добавление нескольких массивов для формирования одного окончательного массива. Отладка быстрого xcode
  • Interesting Posts

    отключить помощника формы в мобильном сафари?

    'Попытка изменить неизменяемый объект с помощью deleteCharactersInRange': Xcode 7.2 ошибка создания архива для загрузки в appstore

    Firebase Facebook зарегистрируйтесь, если пользователь существует

    Переместите UIView, когда появится клавиатура с функцией AutoLayout

    Установка значения двойного атрибута в NSManagedObject

    Доступ к чтению заказа Проблема с использованием addChildViewController

    AutoLayout, не может одновременно удовлетворять ограничениям

    Созданный вручную UIWindow – это неправильный размер

    Пользовательский UITableViewCell с центрированным UISlider и двумя изображениями

    Загрузка полноэкранного изображения Retina на iPad вызывает массовый всплеск 10 МБ

    Невозможно изменить цвет фона uitableviewheaderfooterview в IOS 7.0

    iOS: прокрутка по одной ячейке за раз

    Сортировка nsdictionary, как это работает?

    Выборочно use_framework! в кокоаподах

    Декларация «u_char» должна быть импортирована из модуля «Darwin.POSIX.sys.types», прежде чем она понадобится

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