阻止用户与 AVPlayerView 交互?
Prevent user from interacting with AVPlayerView?
我正在 UI 中播放一个装饰视频。我隐藏了 AV 播放器控件,但用户仍然可以控制视频。例如,他们可以使用滑动手势来快进或快退。
这让我感到特别惊讶,因为 AVPlayerView 上面有一个叠加视图。
有谁知道如何防止所有用户与该视频互动?
滑动手势一般是三指,据我所知这些对AVPlayerView
的播放行为没有影响; 滚动 手势(两个手指)是这里的问题。要取消默认的滚动手势实现,您只需要覆盖 AVPlayerView
:
上的 scrollWheel:
事件处理程序
import Cocoa
import AVKit
class PPPlayerView: AVPlayerView {
var prohibitScrolling = true
override func scrollWheel(theEvent: NSEvent) {
if prohibitScrolling {
// just swallow the event
} else {
// request default behaviour
super.scrollWheel(theEvent)
}
}
}
如果您的视图位于滚动视图(或其他需要处理鼠标事件的视图)中,您可能需要重写 hitTest: 而不是
- (NSView *)hitTest:(NSPoint)aPoint
{
if (prohibitScrolling) {
return nil;
} else {
return [super hitTest:aPoint];
}
}
或者您可以在新文件中使用扩展名来实现,让我们在 'AVPlayerViewExtensions.swift' 中这样说:
import Cocoa
import AVKit
extension AVPlayerView {
override open func scrollWheel(with event: NSEvent) {
// Disable scrolling that can cause accidental video playback control (seek)
return
}
override open func keyDown(with event: NSEvent) {
// Disable space key (do not pause video playback)
let spaceBarKeyCode = UInt16(49)
if event.keyCode == spaceBarKeyCode {
return
}
}
}
我正在 UI 中播放一个装饰视频。我隐藏了 AV 播放器控件,但用户仍然可以控制视频。例如,他们可以使用滑动手势来快进或快退。
这让我感到特别惊讶,因为 AVPlayerView 上面有一个叠加视图。
有谁知道如何防止所有用户与该视频互动?
滑动手势一般是三指,据我所知这些对AVPlayerView
的播放行为没有影响; 滚动 手势(两个手指)是这里的问题。要取消默认的滚动手势实现,您只需要覆盖 AVPlayerView
:
scrollWheel:
事件处理程序
import Cocoa
import AVKit
class PPPlayerView: AVPlayerView {
var prohibitScrolling = true
override func scrollWheel(theEvent: NSEvent) {
if prohibitScrolling {
// just swallow the event
} else {
// request default behaviour
super.scrollWheel(theEvent)
}
}
}
如果您的视图位于滚动视图(或其他需要处理鼠标事件的视图)中,您可能需要重写 hitTest: 而不是
- (NSView *)hitTest:(NSPoint)aPoint
{
if (prohibitScrolling) {
return nil;
} else {
return [super hitTest:aPoint];
}
}
或者您可以在新文件中使用扩展名来实现,让我们在 'AVPlayerViewExtensions.swift' 中这样说:
import Cocoa
import AVKit
extension AVPlayerView {
override open func scrollWheel(with event: NSEvent) {
// Disable scrolling that can cause accidental video playback control (seek)
return
}
override open func keyDown(with event: NSEvent) {
// Disable space key (do not pause video playback)
let spaceBarKeyCode = UInt16(49)
if event.keyCode == spaceBarKeyCode {
return
}
}
}