2
votes

I'm using the following code to attempt to flip a UIView. It's a playing card. There's a container view, with two children, front and back. I've read in similar questions here that this should be the correct way to do it, but the actual flip itself is not being performed.

I'm intending for this to animate moving the card to the centre of the screen, and flip it from its back to front. The movement to centre is fine, but the flip never occurs.

If I change the View: argument to self, it flips the entire view controller, and if I leave it on the cardContainer, it does nothing at all.

Puzzled :(

UIView *cardContainer = [[UIView alloc] initWithFrame:CGRectMake(20, self.view.frame.size.height + 20, [Card size].width, [Card size].height)];
[self.view addSubview:cardContainer];

Card *card = _playerOneCards[_playerOneNextCardIndex];
card.frame = CGRectMake(0, 0, [Card size].width, [Card size].height);
card.delegate = self;
[cardContainer addSubview:card];

CardBack *back = [[CardBack alloc] initWithFrame:CGRectMake(0, 0, [Card size].width, [Card size].height)];
[cardContainer addSubview:back];


[UIView transitionWithView:cardContainer
                  duration:duration
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{
                    back.alpha = 0.0f;
                    cardContainer.center = self.center;
                }
                completion:nil];
1
How is cardContainer created? - CaptJak
can you show the entire code of the animation? including where the cardContatiner and the children are created - rakeshbs
I've done that, thanks. - Luke

1 Answers

3
votes

Try this. The container view has to be placed in the hierarchy before the animation starts.

//Add container views and subviews

[CATransaction flush];

[UIView transitionWithView:cardContainer
          duration:duration
           options:UIViewAnimationOptionTransitionFlipFromLeft
        animations:^{
            back.alpha = 0.0f;
            cardContainer.center = self.center;
        }
        completion:nil];

You can also wrap your function up in a dispatch_after call. For more information check : http://andrewmarinov.com/working-with-uiviews-transition-animations/