2015-12-21 5 views
2

В Objective-C, я подписался на UIWindowDidBecomeVisibleNotification знать, если какой-то вид становится выше моего текущего контроллера представления, используя:UIWebView и Swift: Обнаружение, когда начинается воспроизведение видео

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

До сих пор, так хорошо. Затем, в уведомлении, я мог проверить, является ли объект не определенных классов (например, _UIAlertControllerShimPresenterWindow -alert views- или UITextEffectsWindow -native sharing view-). В 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 (который используется для представления новостей) , Я попытался сделать то же самое в Swift, поэтому я подписался на уведомление:

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

Я просто проверяю, является ли уведомление.objevt UIWindow, сделайте паузу – Bastet

ответ

0

Вы можете сравнить имя класса вместо самого класса, обратитесь к here, чтобы получить имя класса.

+0

Он работает с первым вариантом. Я видел этот ответ раньше, и я не знаю, почему он не работал в то время. Большое спасибо. EDIT: Для справки, если кто-то хочет сделать что-то подобное, при представлении действия с акциями (после нажатия, например, «Сообщения») теперь появляется новое событие «UIRemoteKeyboardWindow». –

Смежные вопросы