плавная анимация в iOS с использованием CoreAnimation - PullRequest
4 голосов
/ 13 декабря 2010

CoreAnimation - довольно простая вещь, но:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:30];
MyImageView.frame = CGRectOffset(MyImageView.frame, 100, 0);
[UIView commitAnimations];

Я хочу медленно перемещать ImageView на 100 пикселей.Поэтому все значения позиционирования являются двойными, я ожидаю, что система компоновки позиционирует элементы с субпиксельной точностью.Когда я смотрю эту анимацию, я вижу, что ImageView «прыгает» по пикселям вместо плавного перемещения.Любые идеи, чтобы прийти к реальной субпиксельной позиции?Я также попытался установить положение с помощью таймера и пересчитать значения кадра, но тот же эффект.

Обновление: в другой части моего приложения я использую акселерометр, чтобы обновить положение ImageView, и делаюв основном рассчитайте размер рекламного места для графического объекта и затем выполните:

MyImageView.frame = newCGRect; 

Я получил около 60 обновлений / с от акселерометра и добавил фильтр низких частот из примера акселерометра от Apple.идеальное позиционирование?!?!
Почему этого не происходит с CoreAnimation?

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Попробуйте использовать CGAffineTransformTranslate (MyImageView.transform, 100, 0) вместо CGRectOffset.

Ссылка здесь: http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html

0 голосов
/ 28 сентября 2012

Если вы используете CABasicAnimation в платформе QuartzCore, вы можете сгладить анимацию с помощью функции CAMediaTimingFunction.Встроенные альтернативы работали для меня, но, насколько я знаю, вы также можете определить свои собственные функции синхронизации.

CABasicAnimation *starShineAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
starShineAnimation.removedOnCompletion = NO;
starShineAnimation.fillMode = kCAFillModeForwards;
starShineAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...