Как повернуть UIImageView с помощью CATransform3DRotate, чтобы добиться эффекта открытия двери?

Я прочитал и попробовал эту статью (Эффект открытия двери с использованием Core Animation)

И я реализую в своем приложении следующий код:

    CALayer *layer = threeHomeView.layer;
CATransform3D initialTransform = threeHomeView.layer.transform;
initialTransform.m34 = 1.0 / -900;

[UIView beginAnimations:@"Scale" context:nil];
[UIView setAnimationDuration:3];
layer.transform = initialTransform;
CATransform3D rotationAndPerspectiveTransform = threeHomeView.layer.transform;

rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform
                                                      , 40.0f * M_PI / 180.0f
                                                      , 0.0f
                                                      , 1.0f
                                                      , 0.0f);
layer.transform = rotationAndPerspectiveTransform;

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(threeHomeFlyOut)];
[UIView commitAnimations];  

threeHomeView - это UIImageView.

МОЙ ВОПРОС: изображение может вращаться только по средней вертикальной линии изображения, но я хочу, чтобы оно вращалось по левой вертикальной линии изображения.


person ZYiOS    schedule 30.06.2011    source источник
comment
У меня такая же проблема, и я пытаюсь создать здесь подходящее руководство / более подробное объяснение: stackoverflow.com/questions/7685547/   -  person n.evermind    schedule 07.10.2011


Ответы (1)


Используйте CATransform3DRotate, как вы это делали, в сочетании с CATransform3DTranslate для поворота по краю, как я сделал в этот ответ. Вот небольшой отрывок (вам нужно будет изменить его для собственного использования):

CATransform3D t = CATransform3DIdentity;
t = CATransform3DTranslate(t, 0, -self.view.bounds.size.height/2, 0);
t = CATransform3DRotate(t, rec.scale * M_PI, 1, 0, 0);
t = CATransform3DTranslate(t, 0, -self.view.bounds.size.height/2, 0);
self.view.layer.transform = t;
person jtbandes    schedule 03.07.2011
comment
@jtbandes Я попытался применить это к 3D-анимации открытия двери, но это не выглядело реалистично. У меня есть пример кода: stackoverflow.com/questions/7685547/ Не могли бы вы быть так любезны и быстро взглянуть? - person n.evermind; 07.10.2011
comment
Мы можем установить точку привязки на нужный край и просто вращать без смещения, не так ли? - person dmitrynikolaev; 06.12.2012
comment
@blackliteon По какой-то причине это не сработало, когда я попробовал. Если это сработает для вас, ничего страшного. Это было больше года назад, поэтому я точно не помню, что происходило. - person jtbandes; 06.12.2012
comment
Кажется, что дополнительный вид не вращается. Например, внутри представления есть uiimageview, который никогда не поворачивался в качестве родительского представления. Почему? Я сделал что-то не так? - person Bagusflyer; 04.04.2013