代码之家  ›  专栏  ›  技术社区  ›  Alejandro Iván

UIWebView和Swift:检测视频何时开始播放

  •  2
  • Alejandro Iván  · 技术社区  · 9 年前

    在Objective-C中,我订阅了 UIWindowDidBecomeVisibleNotification 要知道某个视图是否超出了我当前的视图控制器,请使用:

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

    到目前为止,一切都很好。然后,在通知中,我可以检查对象是否 某些类别(如 _UIAlertControllerShimPresenterWindow -警报视图-或 UITextEffectsWindow -本机共享视图-)。在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
        }
    }
    

    这允许我在从 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' 。同样的事情发生在 UITextEffects窗口 .

    我想我必须导入 某物 检测这些类,但我应该导入什么?

    在不桥接Objective-C的情况下,还有其他方法吗?我如何才能访问该类?

    提前谢谢你。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Community LiorH    7 年前

    您可以比较类名而不是类本身,请参阅 here 以获取类名。