iPhone / iPad Spinner для сохранения анимации - PullRequest
3 голосов
/ 05 января 2011

Я новичок в core-animation. Я основываюсь на предыдущем посте: вращение изображения по часовой стрелке / против часовой стрелки при касании

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

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


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

Ответы [ 2 ]

3 голосов
/ 05 января 2011

Это общая точка смешения с 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:.Не беспокойтесь о неявной анимации.Внутри CALayer хранит все свои анимации в словаре с ключами от имен свойств, а при добавлении новой анимации отменяет и заменяет любую существующую анимацию для указанного ключа / свойства.Я не могу сказать, нужна ли вам помощь с жестом смахивания или нет, но вы должны проверить UIPanGestureRecognizer, если вы еще этого не сделали.Он предоставляет удобный метод velocityInView:, который даст вам двухмерный вектор в направлении панорамирования, выраженный в точках в секунду.У меня есть пример кода распознавателя жестов на github , который может помочь.

2 голосов
/ 05 января 2011

(Кстати, это потрясающая реализация.)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...