iOS - 特定のビューのみのフリップアニメーション 質問する

iOS - 特定のビューのみのフリップアニメーション 質問する

私はいくつかのビュー(メモリ カード ゲームなど)を含むゲームを開発しており、ユーザーがカードをタップすると、このカードが反転して別のビューが表示されるようにしたいと考えています。次のコードを使用します。

- (void)flipCard:(id)sender {

    UIButton *btn=(UIButton *)sender;
    UIView *view=[btn superview];
    UIView *flipView=[[UIView alloc] initWithFrame:[view frame]];
    [flipView setBackgroundColor:[UIColor blueColor]];
    [[flipView layer] setCornerRadius:10];

    NSLog(@"Flip card : view frame = %f, %f",view.frame.origin.x, view.frame.origin.y);

    [UIView transitionFromView:view toView:flipView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {
    }];

}

すべてのビューには、ビュー全体をカバーする透明なボタンがあるため、ユーザーがビューをタップすると、ボタンをタップするのと同じになります。ボタンは、送信者を渡す上記のメソッドを呼び出します。アニメーションが開始されると、送信者から取得したビューだけでなく、すべてのビューが反転されます。どうすればいいですか?

ベストアンサー1

次のコードが問題の解決に役立つかもしれません。透明なボタンを使用するよりもきれいだと思います。

- (void)viewDidLoad {
    [super viewDidLoad];

    flipped = NO;
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

    [flipContainerView addGestureRecognizer:tapGesture];
    [tapGesture release];
}

- (void)handleTap:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateEnded) {
        [UIView transitionWithView:flipContainerView
                          duration:1
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        animations:^{

            if (!flipped) {
                [frontCard setHidden:YES];
                [flipContainerView addSubview:backCard.view]; //or unhide it.
                flipped = YES;
            } else {
                [frontCard setHidden:NO];
                [backCard removeFromSuperview]; //or hide it.
            }

        } completion:nil];
    }
}

おすすめ記事