Это общая точка путаницы с 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, которые могут помочь.
Это один потрясающий счетчик, который вы создали там. :) –