UIView 3DCube, как Clear-приложение
Я искал все сообщения в Google и Stackru, но я просто не могу решить эту головоломку. Я пытаюсь воссоздать эффект, который дает теперь известное приложение todo "Очистить" при добавлении новой задачи. У них есть какая-то анимация, в которой сверху появляется новое задание с эффектом 3D-куба. Особенность их заключается в том, что при внимательном рассмотрении левый и правый нижние углы всегда остаются на одном месте.
Прямо сейчас у меня есть следующее: один UIView 320x460 установлен в точке 0,0 и один UIView 320x460 установлен в точке (0,-460). Я хочу, чтобы верхний UIView спускался в том же кубе-эффекте, что и Clear сверху. Это то, что я до сих пор:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//startLoc is defined globally to remember the first position
startLoc = [[touches anyObject] locationInView:self];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint location = [[touches anyObject] locationInView:self];
float difference = location.y-startLoc.y;
if(diff > 0 && diff < 90)
{
//Init the transform
CATransform3D transform = CATransform3DIdentity;
transform.m34 = perspective;
//Rotate (radians is a degree-to radians function)
transform = CATransform3DRotate(transform, radians(90-diff), 1.0f, 0.0f, 0.0f);
//Also translate the view down
transform = CATransform3DTranslate(transform, 0.0f, 230+diff, 0.0f);
//the 230 is necessary I think for the Anchorpoint but I'm not sure
secondView.layer.transform = transform;
}
}
Это работает как-то, но не правильно, как только я делаю поворот, вид становится больше, а левый нижний и правый нижний углы исчезают из вида. Если я уменьшу вид, а затем сделаю 3D-шкалу, это тоже испортит. Я уже решил проблему исчезновения половины изображения, правильно настроив zPosition для слоев, но это насколько я понимаю. Я пытался использовать код из других проектов, но все их эффекты 3D-куба не совпадают с "Clear" App. Единственный, который подходит ближе - это проект iCarousel, но я не могу использовать правильный код из приложения, я не могу заставить его работать. Кто-нибудь может мне помочь?
2 ответа
Вот несколько ссылок, которые конкретно охватывают тему перспективных преобразований UIView 3D:
http://www.sunsetlakesoftware.com/2008/10/22/3-d-rotation-without-trackball
http://watchingapple.com/2008/04/core-animation-3d-perspective/
Этот пост также актуален: Как применить перспективное преобразование к UIView?
Вы можете взглянуть на реализацию с открытым исходным кодом на GitHub https://github.com/mystcolor/JTGestureBasedTableViewDemo