2012-02-20 5 views
0

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

Что я пытаюсь сделать, это разместить небольшое изображение 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]; 
} 
+0

Почему у вас есть одно и то же состояние в каждой строке? ('UIControlStateNormal') – Zakaria

ответ

0

Одна вещь, чтобы попробовать было бы создать обычай UIButton и добавить UIImageView, как это мнение.

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

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

Код ниже добавляет 4 изображения и оживляет их в бесконечном цикле. Возможно, вы захотите сохранить ссылку на animView, чтобы вы могли запускать/останавливать анимацию всякий раз, когда захотите. Или, если в вашем приложении будет больше анимированных кнопок, вы можете рассмотреть подклассы 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]; 
} 
Смежные вопросы