2013-02-28 4 views
0

Я пытаюсь найти способ анимации 3D-вращения UIView. Я хочу, чтобы это выглядело как анимация push-уведомления, если вы выберете стиль «Баннер». Я пытаюсь использовать что-то вродеРеалистичная анимация вращения 3D UIView

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"]; 
CATransform3D t = CATransform3DIdentity; 
t = CATransform3DTranslate(t, 0, -self.bounds.size.height/2, 0); 
t = CATransform3DRotate(t, M_PI_2, 1, 0, 0); 
t = CATransform3DTranslate(t, 0, -self.bounds.size.height/2, 0); 
[anim setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]]; 
[anim setToValue:[NSValue valueWithCATransform3D:t]]; 
anim.removedOnCompletion = NO; 
[anim setDuration:0.25]; 
anim.fillMode = kCAFillModeForwards; 
anim.delegate = self; 
[self.layer addAnimation:anim forKey:@"Rotation"]; 

Но это выглядит плоским и не очень реалистичным 3D как баннеры push-уведомлений. Как я могу сделать эту анимацию более реалистичной?

+0

Основная часть реализма заключается в том, что вам не хватает перспективы. Установите 't.m34 = -1.0/500.0;' перед тем, как начать его преобразовывать (вы можете прочитать, почему в конце [этого длинного сообщения] (http://ronnqvi.st/the-math-behind-transforms/)) , Помимо этого, анимация translate-rotate-translate будет делать это по прямой (вы можете видеть, о чем я говорю [здесь] (http://ronnqvi.st/translate-rotate-translate/)) –

ответ

2

Возможно, вам необходимо взглянуть на то, как реализовано CMNavBarNotificationView.

Плюс, существуют различные типы CALayer, и вы можете выбрать желаемый из +(Class)layerClass вашего анимированного изображения. Мне кажется, что вы придерживаетесь простого CALayer.

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