0

我有一个带有导航树的应用程序。某处有一个带 mp3 的音频播放器。

UITabViewController // controlled by AppDelegate.m
    -> UINavigationController
        -> UITableViewController // controlled by TableViewController.m
            -> UIViewController // with my AVAudioPlayer controlled by AudioViewController.m

AudioViewController.m我有我所有的音频引擎,所以我播放/暂停/停止它,甚至在按下后退按钮时杀死它(使用 viewWillDisappear 等) - 它只在这个视图中播放,而不是在另一个视图中,这很好。

但是,当我在播放打开时按主页按钮时会出现问题。它停止了,但回到我的应用程序后,它会从记住的时间戳再次播放。

我尝试了所有这些:

- (void)viewDidUnload
{
    [super viewDidUnload];
    [self audioStop:self];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self audioStop:self];
    [super viewWillDisappear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self audioStop:self];
}

- (void)viewWillUnload
{
    [self audioStop:self];
    [super viewWillUnload];
}

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self audioStop:self];
}

但什么也没有发生。

现在我知道要管理是否按下主页按钮,我需要使用applicationWillResignActiveAppDelegate 的方法,但我完全不知道如何从这里停止我的音频播放器。我对iOS很陌生,我不熟悉如何delegates工作,所以请帮我解决这个问题。

4

2 回答 2

1

让您 AppDelegate 为您的 UIViewcontroller 提供一些参考并调用它。有道理?

   AppDelegate
        |
        v
    TableViewController (@property)
        |
        v
    UIViewController (@property)
        |
        v
    AudioPlayer (@property) --> [ stop];

编辑:

@interface TableViewController : UIViewController
{
     AudioPlayer * audioPlayer;
}
@property(nonatomic, retain) AudioPlayer * audioPlayer;
... // other stuff
@end

@implementation TableViewController
@synthesize audioPlayer;
... // other stuff
@end

这样您就可以从 TableViewController 对象访问音频播放器。如果您以这种方式持有 TableViewController 对象,那对您来说应该很容易。

[tableViewController.audioPlayer someMethod]; 

类似的东西..

于 2012-07-24T09:22:59.207 回答
0

当按下主页按钮时,您需要使用 AppDelegate 中的 applicationWillResignActive 方法,我们如何使用此方法,我将向您展示。您需要在视图控制器中使用 NotificationObeserver。

如何添加 NotificationOberserver

 NotificationCenter.default.addObserver(self, selector: #selector(self.application_resign_active(notification:)), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)

现在您可以在此功能中停止声音:像这样

func application_resign_active(notification : NSNotification)
{

    if my_audio_player.isPlaying{
        print("Stop")
        my_audio_player.stop()
    }

}

my_audio_player 是 AudioPlayer 的一个实例

var my_audio_player = AVAudioPlayer()

您还可以查看我的视频,我是如何做到的:https ://www.youtube.com/watch?v=BxmhTAd1SU4

于 2017-06-22T05:17:57.437 回答