【发布时间】:2016-06-29 03:47:53
【问题描述】:
每当网络视图中的视频尝试变成全屏时,我都会尝试将窗口对象设置为 nil,因为我不希望它占据屏幕。我的控制器中有这个:
NSNotificationCenter.defaultCenter().addObserverForName(
UIWindowDidResignKeyNotification,
object: self.view.window,
queue: nil
) { notification in
notification.object = nil // <------ doesn't work because it's read only
print("Video is now fullscreen")
}
但是,object 属性是只读的。是否可以将其设置为零?或者是否有其他方法可以截取即将全屏的视频并从中提取视频 URL?
提前致谢。
== 更新 ==
正如 Altimir 所建议的,我已经尝试过:(Swift 2)
NSNotificationCenter.defaultCenter().addObserverForName(
UIWindowDidResignKeyNotification,
object: self.view.window,
queue: nil
) { notification in
do {
try notification.object?.remove()
} catch {
print("failed")
}
print("Video is now fullscreen")
}
== 更新 2 ==
我也按照 Ozgur 的建议尝试了这个:
NSNotificationCenter.defaultCenter().addObserverForName(
UIWindowDidResignKeyNotification,
object: self.view.window,
queue: nil
) { notification in
do {
try NSNotificationCenter.defaultCenter().removeObserver(self)
print("success")
} catch {
print("failed")
}
print("Video is now fullscreen")
}
但当我在 web 视图中单击 youtube 视频时,视频仍然全屏显示。
【问题讨论】:
-
该属性只是发送通知的对象。即使您可以将
notification.object设置为 nil,您也只会从通知对象中删除引用,而不会以任何方式影响该对象。此通知只是告诉您您的关键窗口不再是关键窗口。你不能用它以任何方式影响新的关键窗口 -
有没有办法阻止全屏视频接管?如果我先
let win = notification.object as! UIWindow然后win.hidden = true呢? -
否,因为通知不是窗口。当您收到此通知时,视频已经“接管” - 这是 didresignKeyNotification - 过去时。如果您解释了视频是如何被触发/呈现的,也许有人可以提供帮助,但通知对您没有帮助。
-
视频将按照问题中的说明在网络视图中显示。就像访问 youtube 并点击其中一个视频一样,它会以全屏模式播放
-
为什么要在观察通知时将通知设置为
nil?发件人在发布之前为您准备好包裹,如果您可以在观察者中本地更改通知的详细信息,您可以什么都没有。