Я разрабатываю игру, которая содержит некоторое представление (как игра с картой памяти), и я хочу, чтобы когда пользователь нажимал на карту, это перевернуть и показать другой вид. Я использую этот код:
- (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) {
}];
}
Каждое представление имеет прозрачную кнопку, которая закрывает все представление, поэтому, когда пользователь нажимает на представление, также нажимает кнопку. Кнопка вызывает метод, указанный выше, передавая отправителя. Когда начинается анимация, переворачивается весь вид, а не только вид, который я получаю от отправителя. Как я могу это сделать?
У меня была такая же проблема. После поиска различных сообщений в интернете я смог найти элегантное и простое решение. У меня есть карты как пользовательские кнопки UIB. В пользовательский класс 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;
}
Надеюсь, это поможет кому-то еще, поскольку первый ответ уже принят
ОБНОВЛЕНИЕ
Если вы находитесь на представлении, содержащем этот подвид, код:
-(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;
}