Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';当AVPlayer运行时,不要滑动UIScrollView_Ios_Swift_Xcode - Fatal编程技术网

Ios Can';当AVPlayer运行时,不要滑动UIScrollView

Ios Can';当AVPlayer运行时,不要滑动UIScrollView,ios,swift,xcode,Ios,Swift,Xcode,大家好,我正在尝试通过scrollview在两个页面之间滑动,它可以正常工作,但当我尝试在播放视频时滑动,它将不起作用。这里是我的ViewController代码 维护控制器 override func viewDidLoad() { super.viewDidLoad() scrollView.isPagingEnabled=true let settings = SettingsViewController(nibName: "Settings

大家好,我正在尝试通过scrollview在两个页面之间滑动,它可以正常工作,但当我尝试在播放视频时滑动,它将不起作用。这里是我的ViewController代码

维护控制器

override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.isPagingEnabled=true
        let settings = SettingsViewController(nibName: "SettingsViewController", bundle: nil)
        self.addChildViewController(settings)
        self.scrollView.addSubview(settings.view)
        settings.didMove(toParentViewController: self)

        let diamond = DiamondViewController(nibName: "DiamondViewController", bundle: nil)
        var frame1 = diamond.view.frame
        frame1.origin.x = self.view.frame.size.width
        diamond.view.frame=frame1
        self.addChildViewController(diamond)
        self.scrollView.addSubview(diamond.view)
        diamond.didMove(toParentViewController: self)
        self.scrollView.contentSize = CGSize(width: self.view.frame.size.width * 2, height: self.view.frame.size.height-70)
        scrollView.contentOffset = CGPoint(x: scrollView.frame.size.width, y: 0)
}
var playerViewController = AVPlayerViewController()
var playerView = AVPlayer()

override func viewDidLoad() {
    super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {

    let fileURL = NSURL(fileURLWithPath: "PATHTOVIDEO")
    playerView=AVPlayer(url: fileURL as URL)

    playerViewController.showsPlaybackControls=false;

    NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerView.currentItem, queue: nil)
    { notification in
        let t1 = CMTimeMake(1, 100);
        self.playerView.seek(to: t1)
        self.playerView.play()

    }


    playerViewController.player = playerView

    self.present(playerViewController,animated:true){
        self.playerViewController.player?.play()
    }
}
第二视图控制器

override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.isPagingEnabled=true
        let settings = SettingsViewController(nibName: "SettingsViewController", bundle: nil)
        self.addChildViewController(settings)
        self.scrollView.addSubview(settings.view)
        settings.didMove(toParentViewController: self)

        let diamond = DiamondViewController(nibName: "DiamondViewController", bundle: nil)
        var frame1 = diamond.view.frame
        frame1.origin.x = self.view.frame.size.width
        diamond.view.frame=frame1
        self.addChildViewController(diamond)
        self.scrollView.addSubview(diamond.view)
        diamond.didMove(toParentViewController: self)
        self.scrollView.contentSize = CGSize(width: self.view.frame.size.width * 2, height: self.view.frame.size.height-70)
        scrollView.contentOffset = CGPoint(x: scrollView.frame.size.width, y: 0)
}
var playerViewController = AVPlayerViewController()
var playerView = AVPlayer()

override func viewDidLoad() {
    super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {

    let fileURL = NSURL(fileURLWithPath: "PATHTOVIDEO")
    playerView=AVPlayer(url: fileURL as URL)

    playerViewController.showsPlaybackControls=false;

    NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playerView.currentItem, queue: nil)
    { notification in
        let t1 = CMTimeMake(1, 100);
        self.playerView.seek(to: t1)
        self.playerView.play()

    }


    playerViewController.player = playerView

    self.present(playerViewController,animated:true){
        self.playerViewController.player?.play()
    }
}

现在我想知道的是,即使视频正在播放,我如何在页面之间滑动?是否有解决方法或其他方法?

尝试将您的
avplayervewcontroller
嵌入到您的SecondViewController中,而不是显示它

代码示例:

let url = // whatever
let player = AVPlayer(URL:url)
let av = AVPlayerViewController()
av.player = player
av.view.frame = // whatever
self.addChildViewController(av)
self.view.addSubview(av.view)
av.didMoveToParentViewController(self)
代码来源:

我认为问题在于您在第二视图控制器上添加的
swipeRight
手势识别器。在我看来,它捕捉到了触摸,并没有让scrollview处理它。这部分只是为了尝试一下,否则在播放视频时,这两种方式都不起作用。问题是,您正在演示
playervewcontroller
,然后当您播放视频时,您将进入一个新的
ui窗口
,不再触摸旧窗口。谢谢Franco Meloni,您的帮助与下面答案的帮助相结合,我发现了如何做到这一点。我将您的代码作为子视图添加到scrollview中,效果非常好