我有两种方法。一种方法开始播放音频文件 (.mp3),另一种方法更新 UIToolBar 以显示按钮(播放或暂停)。这两个方法按以下顺序调用:
//Adds some UIBarButtonItems to a UIToolBar
[self togglePlayer];
//Uses AVAudioPlayer
[audioPlayer play];
TogglePlayer 这样做:
-(void)togglePlayer
{
NSLog(@"Toggling Player");
NSArray *barButtonItems;
UIBarButtonItem *barButtonSpaceL;
UIBarButtonItem *barButtonSpaceR;
UIBarButtonItem *barButtonItemPlayer;
UIBarButtonItem *barButtonItemCancel;
UIBarButtonItem *barButtonItemLyrics;
UIBarButtonItem *barButtonItemTweet;
if([myToolbar.items count] > 0){
NSEnumerator *enumerator = [myToolbar.items objectEnumerator];
id object;
while ((object = [enumerator nextObject])) {
[object release];
object = nil;
}
}
if(!downloadInProgress){
barButtonSpaceL = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
barButtonSpaceR = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
if(thePlayerState == PLAYER_PLAYING){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"pauseIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pauseButtonPressed:)];
barButtonItemLyrics = [[UIBarButtonItem alloc] initWithTitle:@"Lyrics" style:UIBarButtonItemStyleBordered target:self action:@selector(switchPageLyrics:)];
barButtonItemTweet = [[UIBarButtonItem alloc] initWithTitle:@"Tweet This" style:UIBarButtonItemStyleBordered target:self action:@selector(tweetSong:)];
if(canTweet){
barButtonItems = [NSArray arrayWithObjects:barButtonItemTweet, barButtonSpaceR, barButtonItemPlayer, barButtonSpaceL, barButtonItemLyrics, nil];
}else{
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemLyrics, nil];
}
}else if(thePlayerState == PLAYER_PAUSED){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"playIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(playButtonPressed:)];
barButtonItemLyrics = [[UIBarButtonItem alloc] initWithTitle:@"Lyrics" style:UIBarButtonItemStyleBordered target:self action:@selector(switchPageLyrics:)];
barButtonItemTweet = [[UIBarButtonItem alloc] initWithTitle:@"Tweet This" style:UIBarButtonItemStyleBordered target:self action:@selector(tweetSong:)];
if(canTweet){
barButtonItems = [NSArray arrayWithObjects:barButtonItemTweet, barButtonSpaceR, barButtonItemPlayer, barButtonSpaceL, barButtonItemLyrics, nil];
}else{
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemLyrics, nil];
}
}else{
//PLAYER OFF
barButtonItems = [NSArray arrayWithObjects:barButtonSpaceL, nil];
}
[myToolbar setItems:barButtonItems];
}else{
barButtonSpaceL = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
barButtonSpaceR = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
barButtonItemCancel = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"VC1_DownloadCancel", @"") style:UIBarButtonItemStyleBordered target:self action:@selector(downloadCancelled:)];
if(thePlayerState == PLAYER_PLAYING){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"pauseIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pauseButtonPressed:)];
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemCancel, nil];
}else if(thePlayerState == PLAYER_PAUSED){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"playIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(playButtonPressed:)];
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemCancel, nil];
}else{
//PLAYER OFF
barButtonItems = [NSArray arrayWithObjects:barButtonSpaceL, barButtonItemCancel, barButtonSpaceR, nil];
}
[myToolbar setItems:barButtonItems];
}
}
我按上述顺序调用这些方法,以便在歌曲开始播放时显示(暂停)按钮。但是,问题是歌曲首先开始播放,并且 UIToolBar 在很长一段时间内(从 2 到 5 秒)保持不变,直到添加并显示按钮。
我想要的是在歌曲开始播放的同时显示按钮(即无延迟)。有没有办法做到这一点?