UIView анимация изменить изображение кнопки - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть UIButton, и я хочу изменить это изображение с анимацией (изменить 4 изображения), я пробовал этот метод, но он меняется только на последнее изображение.

что я пытаюсь сделать, это поставитьмаленькое изображение UIButton из текущего изображения.

 [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationDelegate:self];

    [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_2.png"] forState:UIControlStateNormal];
    [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_3.png"] forState:UIControlStateNormal];
    [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_2.png"] forState:UIControlStateNormal];
    [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_1.png"] forState:UIControlStateNormal];

    [UIView commitAnimations];

Редактировать

-(void)animationPlayButton:(NSString*)name{
    if ([name isEqualToString:@"pause"]) {
        [UIView beginAnimations:@"pause1" context:NULL];
    }else if ([name isEqualToString:@"play"]){
        [UIView beginAnimations:@"play1" context:NULL];
    }

    [UIView setAnimationDuration:10.0];
    [UIView setAnimationDelay:2.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(buttonAnimationDidStop:finished:context:)];

    if ([name isEqualToString:@"pause"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_2.png"] forState:UIControlStateNormal];
    }else {
        [playBtn setImage:[UIImage imageNamed:@"Control_PLAY_2.png"] forState:UIControlStateNormal];
    }

    [UIView commitAnimations];
}

- (void)buttonAnimationDidStop:(NSString*)animationID finished:(BOOL)finished context:(void *)context{
    if (!animationID) {
        NSLog(@"null");
        return;
    }
    NSLog(@"%@",animationID);

    if ([animationID isEqualToString:@"pause1"]) {
        [UIView beginAnimations:@"pause2" context:NULL];
    }else if ([animationID isEqualToString:@"play1"]){
        [UIView beginAnimations:@"play2" context:NULL];
    }else if ([animationID isEqualToString:@"pause2"]) {
        [UIView beginAnimations:@"pause3" context:NULL];
    }else if ([animationID isEqualToString:@"play2"]){
        [UIView beginAnimations:@"play3" context:NULL];
    }else if ([animationID isEqualToString:@"pause3"]) {
        [UIView beginAnimations:NULL context:NULL];
    }else if ([animationID isEqualToString:@"play3"]){
        [UIView beginAnimations:NULL context:NULL];
    }

    [UIView setAnimationDuration:10.0];
    [UIView setAnimationDelay:2.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(buttonAnimationDidStop:finished:context:)];

    if ([animationID isEqualToString:@"pause1"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_3.png"] forState:UIControlStateNormal];
    }else if ([animationID isEqualToString:@"play1"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PLAY_3.png"] forState:UIControlStateNormal];
    }else if ([animationID isEqualToString:@"pause2"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_2.png"] forState:UIControlStateNormal];
    }else if ([animationID isEqualToString:@"play2"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PLAY_2.png"] forState:UIControlStateNormal];
    }else if ([animationID isEqualToString:@"pause3"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PAUSE_1.png"] forState:UIControlStateNormal];
    }else if ([animationID isEqualToString:@"play3"]) {
        [playBtn setImage:[UIImage imageNamed:@"Control_PLAY_1.png"] forState:UIControlStateNormal];
    }

    [UIView commitAnimations];
}

1 Ответ

0 голосов
/ 20 февраля 2012

Можно попробовать создать пользовательскую кнопку UIButton и добавьте UIImageView как его вид.

Тогда вы можете просто использовать анимацию UIImageView - один из учебников здесь .

Я только что проверил код ниже, и он работает. Не совсем так, как вы хотите, но я уверен, что вы удается изменить код для ваших нужд.

Приведенный ниже код добавляет 4 изображения и анимирует их в бесконечном цикле. Возможно, вы захотите сохранить ссылку на animationView, чтобы вы могли запускать / останавливать анимация, когда вы хотите. Или, если в вашем приложении будет больше анимированных кнопок, вы можете рассмотреть подкласс UIButton.

-(void) createButton {

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button addTarget:self 
               action:@selector(buttonClicked)
     forControlEvents:UIControlEventTouchUpInside];

    button.frame = CGRectMake(80.0, 210.0, 160.0, 140.0);

    UIImageView *animationView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,160.0,140.0)];


    NSMutableArray* imageArray = [[NSMutableArray alloc] initWithCapacity:4];

    [imageArray addObject:[UIImage imageNamed: @"Frame_0.tiff"]];
    [imageArray addObject:[UIImage imageNamed: @"Frame_1.tiff"]];
    [imageArray addObject:[UIImage imageNamed: @"Frame_2.tiff"]];
    [imageArray addObject:[UIImage imageNamed: @"Frame_3.tiff"]];

    animationView.animationImages = [NSArray arrayWithArray:imageArray];
    [animationView setAnimationDuration:1.0];
    animationView.animationRepeatCount = 0;

    [button addSubview: animationView];

    [animationView startAnimating];

    [self.viewController.view addSubview:button];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...