Как перевернуть UIView вокруг оси X при одновременном переключении подпредставлений

Этот вопрос уже задавали раньше, но немного по-другому, и я не смог получить ни один из ответов, чтобы он работал так, как я хотел, поэтому я надеюсь, что кто-нибудь с отличными навыками Core Animation может мне помочь.

У меня на столе лежит набор карт. Когда пользователь проводит пальцем вверх или вниз, набор карт перемещается вверх и вниз по столу. В любой момент времени на экране видны 4 карты, но лицевой стороной показывается только вторая карта. Когда пользователь проводит пальцем по экрану, вторая карта переворачивается лицевой стороной, а следующая карта (в зависимости от направления смахивания) приземляется на свое место, показывая свою лицевую сторону.

Я настроил свой класс просмотра карты следующим образом:

@interface WLCard : UIView {
    UIView *_frontView;
    UIView *_backView;
    BOOL flipped;
}

И я попытался перевернуть карту, используя этот фрагмент кода:

- (void) flipCard {
    [self.flipTimer invalidate];
    if (flipped){
        return;
    }

    id animationsBlock = ^{
            self.backView.alpha = 1.0f;
            self.frontView.alpha = 0.0f;
            [self bringSubviewToFront:self.frontView];
            flipped = YES;

            CALayer *layer = self.layer;
            CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
            rotationAndPerspectiveTransform.m34 = 1.0 / 500;
            rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, M_PI, 1.0f, 0.0f, 0.0f);
            layer.transform = rotationAndPerspectiveTransform;
    };
    [UIView animateWithDuration:0.25
                          delay:0.0
                        options: UIViewAnimationCurveEaseInOut
                     animations:animationsBlock
                     completion:nil];

}

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

  1. Анимирована только половина карты по оси x.
  2. После переворачивания лицевая сторона карты оказывается перевернутой и зеркальной.
  3. После того, как я перевернул карту, я больше не могу запустить анимацию. Другими словами, я могу запускать блок анимации столько раз, сколько захочу, но анимация будет только в первый раз. В последующие разы, когда я пытаюсь анимировать, я просто появляюсь и исчезаю между подвидами.

Кроме того, имейте в виду, что мне нужно иметь возможность взаимодействовать с лицевой стороной карты. то есть на нем есть кнопки.

Если кто-то сталкивался с этими проблемами, было бы здорово увидеть ваши решения. Еще лучше было бы добавить преобразование перспективы к анимации, чтобы придать ей дополнительный реализм.

9
задан Michael Gaylord 11 March 2012 в 15:05
поделиться