Анимации UIView предназначены для анимации свойств представления, а не для анимации слоев. Насколько мне известно, вы не можете анимировать слой представления, используя вызов UIView animateWithDuration:.
Вам нужно будет создать CABasicAnimation и добавить его в слой вашего представления самостоятельно.
Прошло некоторое время с тех пор, как я сделал CAAnimations, но давайте посмотрим, что я могу накопать:
Как говорит atxe, вы должны переместить точку привязки слоя на 1,.5, прежде чем делать эту анимацию, чтобы она вращалась вокруг правого края.
Вот код из нашего мультяшного приложения «Кевин и Келл», который анимирует дверь, распахивающуюся на петлях:
//Open the door.
rotateAnimation = [CABasicAnimation animation];
rotateAnimation.keyPath = @"transform";
rotateAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
//Pivot on the right edge (y axis rotation)
theTransform = CATransform3DIdentity;
theTransform.m34 = -1/100.0;
theTransform = CATransform3DRotate(theTransform, degreesToRadians(70), 0, 1, 0);
rotateAnimation.toValue = [NSValue valueWithCATransform3D:theTransform];
rotateAnimation.duration = 0.5;
// leaves presentation layer in final state; preventing snap-back to original state
rotateAnimation.removedOnCompletion = NO;
rotateAnimation.fillMode = kCAFillModeBoth;
rotateAnimation.repeatCount = 0;
rotateAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotateAnimation.delegate = self;
[treeDoorImageView.layer addAnimation:rotateAnimation forKey:@"transform"];
Логика преобразования почти идентична вашей (я использую значение m34 -1/100 для более преувеличенного 3D-эффекта. Ваше значение -1/500 более нормальное).
Обратите внимание, что вместо того, чтобы пытаться сделать анимацию из блока анимации UIView, я создаю CABasicAnimation и устанавливаю его свойства fromValue и toValue в начальное и конечное значения преобразования.
Вы сможете использовать этот код в качестве отправной точки для анимации.
person
Duncan C
schedule
12.12.2013