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];
flipped = YES;
} else {
[frontCard setHidden:NO];
[backCard removeFromSuperview]; //or hide it.
}
} completion:nil];
}
}
Ответ 2
У меня была та же проблема. После поиска различных сообщений в Интернете я смог придумать элегантное и простое решение. У меня есть карточки как пользовательские UIButtons. В пользовательском классе UIButton я добавил метод, который изменяет фоновое изображение с помощью флип-анимации:
-(void) flipCard{
[UIView transitionWithView:self
duration:0.3f
options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionCurveEaseInOut
animations:^{
if (self.isFlipped) {
[self setBackgroundImage:[UIImage imageNamed:@"card_back_2.png"] forState:UIControlStateNormal];
}else{
[self setBackgroundImage:[UIImage imageNamed:self.cardName] forState:UIControlStateNormal];
}
} completion:NULL];
self.isFlipped = !self.isFlipped;
}
Надеюсь, это поможет кому-то еще, поскольку первый ответ уже принят.
UPDATE
Если вы находитесь в представлении, содержащем этот под-просмотр, код:
-(void)flipCard:(APCard*)card{
[UIView transitionWithView:card
duration:kFlipTime
options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionCurveEaseInOut
animations:^{
if (card.isFlipped) {
[card setBackgroundImage:[UIImage imageNamed:@"card_back_2.png"] forState:UIControlStateNormal];
}else{
[card setBackgroundImage:[UIImage imageNamed:card.cardName] forState:UIControlStateNormal];
}
completion:^(BOOL finished) {
if (finished) {
//DO Stuff
}
}
];
card.isFlipped = !card.isFlipped;
}