2013-05-03 2 views
0

У меня есть изображение мультяшного лица, чтобы повернуть его так же, как встряхивание головы немного слева направо (как и при прослушивании музыки) в течение определенной продолжительности времени, например, 5- 7 секунд. Итак, я делаю следующее:Вращение до определенного угла не работает

-(void)rotation{ 

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
[rotate setFromValue:[NSNumber numberWithFloat:0.0]]; 
[rotate setToValue:[NSNumber numberWithFloat:45]]; 
[rotate setDuration:5.0]; 
[rotate setAutoreverses:YES]; 
[rotate setTimingFunction:[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]]; 

[[faceImage layer] addAnimation:rotate forKey:@"dangleFaceImage"]; 

} 

Но изображение вращается как мяч! Я думаю, что мой код не совсем прав. Как я могу сделать это вращение?

+0

Когда-либо слышал о [радианах] (http://sv.wikipedia.org/wiki/Radian)? В документации упоминается, что все углы находятся в радианах повсюду (например, «вращается под углом» радиан ») –

ответ

-1

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

+0

Сначала поймите последнюю строку его вопроса и затем пропустите голос. – CodenameLambda1

+0

У меня нет достаточной репутации для голосования u up! Так что, извините, если кто-то проголосовал за вас. Но у меня есть смысл. Но я не могу понять, как я могу это сделать в коде. Можно ли показать пример? – Leo

+0

В CALayer.h anchorPoint - Определяет опорную точку прямоугольника границ слоя. Animatable. @property CGPoint anchorPoint Допустим, у вас есть CALayer как голова headLayer.anchorPoint = CGPointMake (headLayer.bounds.size.width/2, headLayer.bounds.size.height); Это приведет к тому, что опорная точка будет ниже среднего дна. Теперь, если вы примените анимацию вращения, тогда центром станет эта точка. – CodenameLambda1

2

вращение принимает значение в радианах, не степень.

[rotate setToValue:[NSNumber numberWithFloat: 45*M_PI/180.]]; 
+0

Большое спасибо. Но проблема в том, что он вращается, так как нижнее положение движется относительно верхнего положения. Но мне нужно переместить верхнее положение изображения относительно нижнего положения изображения! & также двигаясь в сторону не в обе стороны! – Leo

0

Для LeftSide

CGAffineTransform transform = CGAffineTransformRotate(imgBg.transform, M_PI/-360); 
    imgBg.transform = transform; 

Для правой стороны

CGAffineTransform transform = CGAffineTransformRotate(imgBg.transform, M_PI/360); 
    imgBg.transform = transform; 
+0

здесь вы можете настроить угол –

0

Try вращаться с помощью вращения преобразования. Сначала вы должны установить изображение в ImageView. Предположим, что faceImageView затем

faceImageView.transform = CGAffineTransformRotate(faceImageView.transform, angle); 

Это будет вращаться с требуемым углом :)

0

В CALayer.h anchorPoint - Определяет опорную точку за пределы прямоугольника слоя. Animatable.

@property CGPoint anchorPoint 

Допустим, у вас есть CALayer, как headLayer

headLayer.anchorPoint = CGPointMake(headLayer.bounds.size.width/2,headLayer.bounds.size.height); 

это приведет якорь точку, чтобы опустить в середине дна.

Теперь, если вы примените анимацию вращения, тогда центром будет эта точка.

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