2011-01-05 3 views
3

Я новичок в ядро-animationI я основывая это на предыдущем посте: spin image clockwise/anticlockwise on touchiPhone/IPad Spinner сохранить анимацию

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

Как сохранить объект, где он находится, когда закончится анимация?


Что я действительно хочу - это бесплатное плавающее колесо, которое отвечает на пользователя. Когда пользователь поворачивается влево на колесе, колесо вращается влево. В зависимости от скорости прокрутки колесо вращается быстрее, а затем начинает замедляться. Если кто-то может дать некоторые намеки или указания по этому поводу, я был бы очень благодарен. alt text

+5

Это один потрясающий счетчик, который вы создали там. :) –

ответ

3

Это общая точка путаницы с Core Animation. A CAAnimation фактически не изменяет свойства «модели» этого слоя. Он просто изменяет способ отображения слоя пользователю. Таким образом, ваш toValue никогда не будет установлен на вашем слое, и вам нужно сделать это самостоятельно. Вы можете сделать это прямо до или после удара анимации. Ваше новое значение будет установлено, но пользователь не увидит его, пока анимация не закончится. Надуманный пример:

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform"]; 
rotate.fromValue = [NSValue valueWithCATransform3D:myLayer.transform]; 
rotate.toValue = [NSValue valueWithCATransform3D:CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f)]; 
rotate.duration = .5f; 

myLayer.transform = CATransform3DRotate(myLayer.transform, M_PI, 0.f, 0.f, 1.f); 
[myLayer addAnimation:rotate forKey:@"transform"]; 

Две важные части устанавливают свойство на слое и используя имя свойства в качестве ключа в addAnimation:forKey:. Не беспокойтесь о неявной анимации. Internally, CALayer хранит все свои анимации в словаре, отменившем имена свойств, и когда вы добавляете новую анимацию, она отменяет и заменяет любую существующую анимацию для указанного ключа/свойства.

Кроме того, я не могу сказать, нужна ли вам помощь с жестом салфетки или нет, но вы должны проверить UIPanGestureRecognizer, если вы еще этого не сделали. Он предоставляет удобный метод velocityInView:, который даст вам 2D-вектор в направлении панорамирования, выраженный в точках в секунду. У меня есть gesture recognizer sample code up on github, которые могут помочь.

+0

Итак, как бы вы установили поворот на слое. Здесь вы устанавливаете непрозрачность. И если у вас есть пример кода на PanGesture, это было бы здорово. – smcdrc

+0

Я думал, что у вас возникли проблемы с возвращением анимации в конце. Вместо 'opacity' вы использовали бы свойство' transform'. Я отредактировал свой пример, чтобы повернуть, а не исчезать. Я также добавил ссылку на некоторые примеры распознавания жестов. –

+0

Отлично, спасибо. Я искал то, что мне нужно было изменить, но не мог понять, где установить поворот. – smcdrc

2

(Кстати, что это огромная реализация.)

Вам нужно указать еще два свойства: Режим заполнения и удаление На Завершении:

animation.fillMode = kCAFillModeForwards; 

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

animation.removedOnCompletion = NO; 

Определяет, если анимация удаляется из анимации целевого уровн после завершения.

Из документации Apple:

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAMediaTiming_protocol/Introduction/Introduction.html

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html%23//apple_ref/occ/cl/CAAnimation

Смежные вопросы