我在iOS 6.1上用xcode 4.6创建了一个应用程序,该应用程序带有一个TabBar和两个不同的tableView。
每个表视图读取文件.plist中的一行,当点击一行时,加载一个DetailView。DetailViewController与2 TableView相同,但:
如果启动应用程序点击第一个按钮,我会看到带有我的表和音频列表的FirstView,如果我选择列表上的一个文件,我会加载一个Detail视图,并很好地收听我的文件,但如果现在点击TabBar上的第二个视图,我可以从第二个窗口开始播放其他音频文件,但我会收听第一个音频和AVplayer的覆盖,而不是覆盖。
我的编码:
从TableView加载plist:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([@"detailList" isEqualToString:segue.identifier]) {
NSIndexPath *index = [self.tableView indexPathForCell:sender];
[[segue destinationViewController] setSaved:[loadData objectAtIndex:index.row]];
}
}
从细节上看:
if (mysound.rate == 1.0) {
UIImage *img = [UIImage imageNamed:@"Play_BT.png"];
[control setImage:img forState:UIControlStateNormal];
[mysound pause];
} else {
UIImage *img = [UIImage imageNamed:@"Pause_BT.png"];
[control setImage:img forState:UIControlStateNormal];
NSURL *url = [NSURL URLWithString:[saved objectForKey:@"audio"]];
mysound = [[AVPlayer alloc] initWithURL:url];
[mysound setAllowsExternalPlayback:YES];
[mysound setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
[mysound play];
}
}
这里传入的问题,这个代码工作得很好,但如果在选项卡栏上点击并从其他plist加载其他音频,我会听音频覆盖。
从选项卡更改时,如何在覆盖NSURL *url = [NSURL URLWithString:[saved objectForKey:@"audio"]];
中使用AVPlayer?
谢谢。
已解决,使用以下代码:
在我的AppDelegate.h中添加
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
AVPlayer *MyPlayer;
}
@property (strong, nonatomic) AVPlayer *MyPlayer;
在didFinishLaunchingWithOptions
内的AppDelegate.m中添加
[MySound superclass];
现在可以直接在.m文件中使用以下代码在所有应用程序中调用方法:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSURL *url = [NSURL URLWithString:[saved objectForKey:@"link"]];
appDelegate.MySound = [[AVPlayer alloc] initWithURL:url];
[appDelegate.MySound setAllowsExternalPlayback:YES];
[appDelegate.MySound setUsesExternalPlaybackWhileExternalScreenIsActive: YES];
[appDelegate.MySound play];
有了这个方法,现在可以控制AVPlayer evry在应用程序中的位置了!!
我希望这能帮助任何人;(