如何在多视图和恢复控件中使用AVPlayer?

时间:2013-04-15 17:23:09

标签: iphone xcode audio avplayer

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

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

如果启动应用程序点击第一个按钮,我会看到带有我的表和音频列表的FirstView,如果我在列表中选择一个文件,我会加载详细信息视图并非常好地监听我的文件,但如果现在点击TabBar上的第二个视图我可以从第二个视图开始播放其他音频文件但我听叠加到第一个音频和AV播放器不会覆盖。

我的编码:

从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];
    }
}

这里传入的问题,这个代码工作非常goog,但如果标签栏上的tapo和从其他plist加载其他音频我听音频叠加。

如何在更改标签栏时使用AVPlayer覆盖NSURL *url = [NSURL URLWithString:[saved objectForKey:@"audio"]];

感谢。

1 个答案:

答案 0 :(得分: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];

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

我希望这能帮助任何人;)