2012-02-01 2 views
0

Я создал два UIButtons, и на UIToolbar появляется только кнопка воспроизведения. В методе воспроизведения, который я хочу, это когда кнопка воспроизведения нажата, она показывает кнопку паузы, и если пользователь нажимает кнопку паузы, она приостанавливает звуковой файл, а затем показывает кнопку воспроизведения.Переключение между режимами воспроизведения/паузы UIButtons

UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

[playButton addTarget:self action:@selector(play:) forControlEvents:UIControlEventTouchUpInside]; 

playButton.frame = CGRectMake(0, 0, 50, 50); 

UIImage *image = [UIImage imageNamed:@"play.png"]; 

[playButton setImage:image forState:UIControlStateNormal]; 

UIBarButtonItem *play = [[UIBarButtonItem alloc] initWithCustomView:playButton]; 



UIButton *pauseButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

[pauseButton addTarget:self action:@selector(pause:) forControlEvents:UIControlEventTouchUpInside]; 

pauseButton.frame = CGRectMake(0, 0, 50, 50); 

UIImage *imge = [UIImage imageNamed:@"pause.png"]; 

[pauseButton setImage:imge forState:UIControlStateNormal]; 

-(void)play:(id)sender 
{ 

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"theme" 
                ofType:@"mp3"]; 

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath]; 

audioPlayer = [[AVAudioPlayer alloc] 
       initWithContentsOfURL:fileURL error:nil]; 

audioPlayer.currentTime = 0; 

[audioPlayer play]; 

[fileURL release]; 

} 

мне нужна помощь в реализации этого

В способе воспроизведения

я сделал

[audioPlayer play]; 

UIImage *imge = [UIImage imageNamed:@"pause.png"]; 

[pauseButton setImage:imge forState:UIControlStateNormal]; 

[audioPlayer pause]; 

UIImage *image = [UIImage imageNamed:@"play.png"]; 

[playButton setImage:image forState:UIControlStateNormal]; 

[audioPlayer Play]; 

Я думаю, что я делаю неправильный путь

Пожалуйста, советы.

Спасибо за помощь.

Благодаря

+0

Это немного сбивает с толку, у вас есть две кнопки. Вы пытаетесь заменить игру и паузу друг на друга? ['>' изменяется на '||']? – nycynik

+0

да, когда нажата кнопка воспроизведения, она должна воспроизводить музыку и заменить кнопку воспроизведения кнопкой паузы, и когда нажата кнопка паузы, она должна приостановить воспроизведение музыки и должна показать кнопку воспроизведения – user1120133

ответ

2

Используйте только одну кнопку с 1 изображения для каждого состояния (Selected и Normal):

UIButton *mediaButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
mediaButton.frame = CGRectMake(0, 0, 50, 50); 

[mediaButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
[mediaButton setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateSelected]; 

[playButton addTarget:self action:@selector(mediaAction:) forControlEvents:UIControlEventTouchUpInside]; 

-(void)mediaAction:(UIButton *)sender 
{ 
    if(sender.selected){ 
    // pause action 
    } else { 
    // play action 
    } 

    sender.selected = !sender.selected; 
} 
0

вы имеете в виду:

if([audioPlayer isPlaying]) { 
    UIImage *imge = [UIImage imageNamed:@"pause.png"]; 
    [pauseButton setImage:imge forState:UIControlStateNormal]; 
    [audioPlayer pause]; 
} 
else { 
    UIImage *image = [UIImage imageNamed:@"play.png"]; 
    [playButton setImage:image forState:UIControlStateNormal]; 
    [audioPlayer Play]; 
} 

правильно?

+0

да, это то, что у меня есть, но получаю сообщение как unused variable imge – user1120133

+0

Вы получаете это предупреждение, которое вы не используете, поскольку вам это не нужно. – erkanyildiz

1

Вам не нужно создавать две отдельные кнопки. Просто создайте одну кнопку и один метод. Просто сохраните состояние в логической переменной или используйте состояние игрока. Сделайте то, что вам нужно сделать, после того, как вы выберете состояние в методе.

Однако, если вы настаиваете на создании двух отдельных кнопок, вы можете скрыть и показать одну из кнопок.

+0

Как я могу сохранить состояние в логической переменной или использовать состояние игрока – user1120133

+0

определить переменную bool из вашего метода и инвертировать ее в конце вашего метода. ! myBoolVariable = myBoolVariable; – erkanyildiz