0

ナビゲーションツリーを備えたアプリケーションがあります。どこかにmp3付きのオーディオプレーヤーがあります。

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

AudioViewController.m私はすべてのオーディオエンジンを持っているので、再生/一時停止/停止し、戻るボタンを押すと(viewWillDisappearなどを使用して)それを強制終了します-それはこの1つのビューでのみ再生され、別のビューでは再生されません。

ただし、再生がオンのときにホームボタンを押すと問題が発生します。停止しますが、アプリに戻った後、記憶されているタイムスタンプから再び再生されます。

私はこれをすべて試しました:

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

しかし、何も起こりません。

ホームボタンが押されたかどうかを管理するにはapplicationWillResignActive、AppDelegateのメソッドを使用する必要があることがわかりましたが、ここからオーディオプレーヤーを停止する方法がまったくわかりません。私は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

When home button was pressed, you need to use applicationWillResignActive method from AppDelegate, How we can use this method , i will show you. You need to use NotificationObeserver in your view controller.

How To add NotificationOberserver

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

Now You can stop sound in this function : Like This

func application_resign_active(notification : NSNotification)
{

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

}

my_audio_player is an instance of AudioPlayer

var my_audio_player = AVAudioPlayer()

You can also Check My Video , how i do this : https://www.youtube.com/watch?v=BxmhTAd1SU4

于 2017-06-22T05:17:57.437 に答える