阻止用户与AVPlayerView交互?

时间:2016-03-10 02:28:07

标签: cocoa avplayer

我在我的界面中播放视频进行装饰。我正在隐藏AV播放器控件,但用户仍然可以控制视频。例如,他们可以使用滑动手势来快进或快退。

这对我来说特别令人惊讶,因为AVPlayerView在它上面有一个叠加视图。

是否有人知道如何阻止所有用户与此视频互动?

3 个答案:

答案 0 :(得分:5)

滑动手势通常是三个手指,从我所知道的这些手势对AVPlayerView的播放行为没有影响; 滚动手势(两个手指)是这里的问题。要取消默认的滚动手势实现,您只需覆盖scrollWheel:上的AVPlayerView事件处理程序:

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) 
        }
    }
}

答案 1 :(得分:1)

或者你可以在新文件中使用扩展名,让我们在'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
        }
    }

}

答案 2 :(得分:0)

如果您的视图位于滚动视图(或需要处理鼠标事件的其他视图)中,您可能希望覆盖hitTest:而不是

- (NSView *)hitTest:(NSPoint)aPoint
{
   if (prohibitScrolling) {
      return nil;
   } else {
      return [super hitTest:aPoint];
   }
}