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