Ios Can';当AVPlayer运行时,不要滑动UIScrollView
大家好,我正在尝试通过scrollview在两个页面之间滑动,它可以正常工作,但当我尝试在播放视频时滑动,它将不起作用。这里是我的ViewController代码 维护控制器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
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中,效果非常好