0

我在 iOS 6.1 上使用 xcode 4.6 创建了一个应用程序,带有一个 TabBar 和 2 个不同的 tableView。

每个表视图从 file.plist 中读取一行,当点击一行时,您会加载一个 DetailView。DetailViewController 与 2 TableView 相同,但:

如果启动应用程序点击第一个按钮,我会看到带有我的表格和音频列表的 FirstView,如果我在列表中选择一个文件,我会加载一个详细信息视图并很好地监听我的文件,但如果现在点击 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 加载其他音频,我会听音频覆盖。

如何在 Override the NSURL *url = [NSURL URLWithString:[saved objectForKey:@"audio"]];when change from tabbar 中使用 AVPlayer?

谢谢。

4

1 回答 1

3

已解决,使用以下代码:

在我的 AppDelegate .h 添加

@interface AppDelegate : UIResponder <UIApplicationDelegate> {

    AVPlayer *MyPlayer;
}

@property (strong, nonatomic) AVPlayer *MyPlayer;

在我的 AppDelegate .m 里面didFinishLaunchingWithOptions添加

[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];

使用这种方法现在可以在 APP 中的任何位置控制 AVPlayer!

我希望这对任何人都有帮助;)

于 2013-04-17T17:41:00.457 回答