2012-11-29 2 views
1

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

Так что я попытался это:

- (void)testButtonPressed:(id)sender { 
    NSLog(@"Test button pressed"); 
    CGAffineTransform transform = CGAffineTransformMakeRotation(1.0); 

    [UIView animateWithDuration:10.0 delay:0 options:UIViewAnimationOptionCurveLinear 
        animations:^{ 
         dial.transform = transform; // "dial" is a UIImageView 
        } 
        completion: ^(BOOL finished){ 
        }]; 
} 

Что происходит, что, когда анимация начинается изображение (это около 300 квадратных) сразу вскакивает 50-100 пикселей и «выдавливается» в узкий овал. После этого анимация идет отлично.

Вместо этого я попытался использовать beginAnimation и получил то же поведение.

Я понимаю, что я не понимаю вещи о происхождении вращения (обсуждение документов в кругах), но сжатие кажется странным, и факт, что все это происходит сразу (против анимирования), странно.

Любые идеи?

(Это работает на тренажере iPhone 6.0 из Xcode 4.5.1 Является ли это возможно только тренажер вещь.?)

Обновление: я получил возможность работать на нем немного больше (я это промежуточный «реальный» труд). Я создал новый XIB, у которого никогда не было автозапуска, и колесо было «нормальным», но фон был вертикально сжат.

Затем немного вдохновения. Я заметил, что изображения были отмечены как «авторезистировать» в дампах NLog. Не видел способа отключить это от IB, но видел, что вы можете отключить «Autoresize Subviews» на главном экране. Это и он прекрасно себя вел!

Я думаю, что некоторые из новых функций, введенных для автоаудита, являются виновниками здесь. Не знаю, хотя, если я нашел все магические настройки.

Но ... По-прежнему существует проблема, что «прозрачные» части моих изображений являются черными на iPad, даже после отключения «непрозрачного» на всем.

Обновление: Я, наконец, понял, что мои изображения были в режиме 24 бит в формате JPG, а не в 32-битном режиме. Это работает на симуляторе - чистый черный интерпретируется как прозрачный. Но это не работает на iPad. Использование 32-битных изображений устраняет это и (с «авторезистировать subviews, отключенные для устранения нечетных искажений/переводов) все в порядке кроме ... вращения> 180 градусов анимация назад. Анимация« умна »и принимает «кратчайший путь».

Я полагаю, я просто разбить анимацию на два этапа.

+0

Я попробовал ваш код на квадратный вид UIImage, и он отлично работал для меня. – rdelmar

+0

Хммм. Я сделал изображение меньшим (с большим запасом), и оно не искажается, но при запуске оно скатывается вниз и направо. –

+0

Сделано меньше, и изображение скачет вниз. Но более странно то, что изображение за ним (которое не анимируется) сжимается горизонтально. Это примерно как ваниль, как я могу себе представить. –

ответ

0

Почему бы вам не сделать это с CABasicAnimation.

CABasicAnimation* rotationAnimation; 
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
rotationAnimation.toValue = [NSNumber numberWithFloat: -M_PI_2 ]; 
rotationAnimation.duration = 2.0; 
rotationAnimation.cumulative = YES; 
rotationAnimation.repeatCount = 1.0; 
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 

[imageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
Смежные вопросы