Странное поведение при анимации вращения UIImageView

Я пытаюсь повернуть UIImageView со следующим кодом:

var x = -((self.needleImage.frame.size.width/2) - 15) //x for rotation point

UIView.animateWithDuration(5.0, delay: 10.0, options: nil, animations: {
    var transform = CGAffineTransformMakeTranslation(x, 0)
    transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2))
    transform = CGAffineTransformTranslate(transform, -x, 0)
    self.needleImage.transform = transformm

Конечная позиция правая, но во время анимации/вращения изображение немного смещается влево, прежде чем остановиться на нужном месте.

Я попробовал тот же код с UIView из этого, и он этого не делает.

Затем я попытался обернуть Imageview внутри View и повернуть его, но это тоже не помогло.

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


person ellonde    schedule 17.08.2015    source источник
comment
Бонусная информация: чем больше я вращаю, тем больше смещение.   -  person ellonde    schedule 17.08.2015
comment
Может центральная ось не точно по центру? Это вызвало бы почти спираль, которая становилась бы больше с большим количеством вращений.   -  person Cole    schedule 17.08.2015
comment
Вы можете уточнить это? как я могу это проверить?   -  person ellonde    schedule 17.08.2015
comment
Поэтому, когда вы берете ширину и половину ее, это должна быть мертвая точка x. Но у вас есть смещение в 15 пунктов, что может быть частью проблемы. Вы пробовали это только с шириной/2?   -  person Cole    schedule 17.08.2015
comment
Да, я пробовал, та же проблема :(   -  person ellonde    schedule 17.08.2015
comment
Может Y не по центру? Вы могли бы попробовать мой ответ, может быть, он прольет свет.   -  person Cole    schedule 17.08.2015
comment
Я попробовал ваш ответ очень быстро, но, похоже, это не помогло :( Я думаю, что мне нужно отвести от него взгляд и завтра посмотреть на него по-новому :) Тогда я попробую ваше решение еще раз :) Но пока спасибо   -  person ellonde    schedule 17.08.2015


Ответы (1)


Я использовал этот фрагмент кода в прошлом, чтобы постоянно вращать представление, но, удалив последнее закрытие, он должен работать, чтобы повернуть изображение на 360 градусов. Это может быть скорректировано, или конечно. Сейчас он настроен на 2PI. Вам нужно будет преобразовать угол поворота в радианы.

func animateRotator() {
        UIView.animateWithDuration(0.5, delay: 0, options: .CurveLinear, animations: { () -> Void in
            self.rotator.transform = CGAffineTransformRotate(self.rotator.transform, CGFloat(M_PI_2))
            }) { (finished) -> Void in
                self.animateRotator()
        }
    }
person Cole    schedule 17.08.2015