transitionWithView不执行翻转动画

时间:2015-02-01 14:54:08

标签: ios objective-c uiview uiviewanimationtransition

我正在使用以下代码尝试翻转UIView。这是一张扑克牌。有一个容器视图,前面和后面有两个孩子。我在这里读过类似的问题,这应该是正确的方法,但实际的翻转本身并没有被执行。

我打算让它动画将卡片移动到屏幕中央,并将其从后向前翻转。到中心的运动很好,但翻转永远不会发生。

如果我将View:参数更改为self,则会翻转整个视图控制器,如果我将其保留在cardContainer上,则它根本不执行任何操作。

困惑:(

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 个答案:

答案 0 :(得分:3)

试试这个。在动画开始之前,容器视图必须放在层次结构中。

//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];

您还可以在dispatch_after来电中打包您的功能。 有关详细信息,请查看:http://andrewmarinov.com/working-with-uiviews-transition-animations/