阻止用户与 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
        }
    }

}