UIView 3DCube как Clear-app

Я просмотрел все сообщения в Google и stackoverflow, но никак не могу решить эту загадку. Я пытаюсь воссоздать эффект, который делает ныне известное приложение «Очистить» при добавлении новой задачи. У них есть какая-то анимация, что сверху появляется новая задача в каком-то эффекте 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-куба не такие, как в приложении «Очистить». Единственный, кто близок, - это проект iCarousel, но я не могу использовать правильный код из приложения, я не могу заставить его работать. Кто-нибудь может мне помочь?

6
задан Bob de Graaf 23 February 2012 в 16:18
поделиться