2015-12-21 115 views
2

在Objective-C,我訂閱了UIWindowDidBecomeVisibleNotification知道一些觀點得到上面我當前視圖控制器,使用:的UIWebView和斯威夫特:檢測當視頻開始播放

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(videoStartedPlaying:) 
              name:UIWindowDidBecomeVisibleNotification 
              object:nil]; 

到目前爲止,一切都很好。然後,在通知,我可以檢查如果對象是特定類別的(如_UIAlertControllerShimPresenterWindow -alert或則須─UITextEffectsWindow -native共享視圖 - )。在Objective-C,我就是這麼做的:

- (void)videoStartedPlaying:(NSNotification *)notification 
{ 
    if (
     <radio_is_playing> 
     && 
     ! [notification.object isKindOfClass:NSClassFromString(@"_UIAlertControllerShimPresenterWindow")] // Alert view 
     && 
     ! [notification.object isKindOfClass:NSClassFromString(@"UITextEffectsWindow") ] // Share 
     ) 
    { 
     // Video, stop the radio stream 
    } 
} 

這讓我停止播放聲音(在這種情況下,HTTP廣播流)從UIWebView啓動視頻時(這是用來展示新聞) 。我試圖做同樣的事情在斯威夫特,所以我訂閱了通知:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoStartedPlaying:", name: UIWindowDidBecomeVisibleNotification, object: nil) 

而現在,接到通知時...

func videoStartedPlaying(notification: NSNotification) { 
    if <radio_is_playing> && !notification.object? is _UIAlertControllerShimPresenterWindow && !notification.object? is UITextEffectsWindow { 
     // Stop the radio stream 
    } 
} 

Xcode中說Use of undeclared type '_UIAlertControllerShimPresenterWindow'UITextEffectsWindow也會發生同樣的情況。

我假設我必須導入東西來檢測這些類,但我應該導入什麼?

是否有任何其他的方式來做到這一點無需橋接Objective-C的?我怎麼能訪問這個類?

預先感謝您。

+0

沒有人進入此? –

+0

我只是檢查如果notification.objevt是UIWindow,做暫停的東西 – Bastet

回答

0

可以對比類的名稱,而不是類本身,是指here得到的類名。

+0

它正在與第一個選項。我之前看到了這個答案,我不知道爲什麼當時它不起作用。非常感謝。編輯:作爲參考,如果其他人想要做類似的事情時,在呈現共享動作時(例如按下「Messages」之後),現在會出現一個新事件「UIRemoteKeyboardWindow」。 –