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) {
    }];

}

Каждое представление имеет прозрачную кнопку, которая закрывает все представление, поэтому, когда пользователь нажимает на представление, также нажимает кнопку. Кнопка вызывает метод, указанный выше, передавая отправителя. Когда начинается анимация, переворачивается весь вид, а не только вид, который я получаю от отправителя. Как я могу это сделать?

28
задан Andrea Mario Lufino 27 January 2012 в 11:01
поделиться

1 ответ

У меня была такая же проблема. После поиска различных сообщений в интернете я смог найти элегантное и простое решение. У меня есть карты как пользовательские кнопки 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;
}
13
ответ дан 28 November 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: