我正在尝试重新创建iOS上的YouTube移动应用所具有的效果,当视频以全屏横向模式播放时。只是窗口的顶部(下一个/推荐的视频)是可见的,向上滑动显示它们与视频重叠(在后台继续运行)。向下滑动会再次隐藏它们。
所以我在视频控制器中添加了以下代码,以横向模式显示视频:
private func showPopover() {
let popoverController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "popoverController")
popoverController.modalPresentationStyle = .popover
popoverController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
popoverController.popoverPresentationController?.delegate = self
let desiredWidth:CGFloat = 200
let desiredHeight:CGFloat = 300
// Initially it's at low right corner
let origin = CGPoint(x: (self.view.superview?.frame.width)! - desiredWidth - 10, y: (self.view.superview?.frame.height)! - 10)
let size = CGSize(width: desiredWidth, height: desiredHeight)
popoverController.popoverPresentationController?.sourceRect = CGRect(origin: origin, size: size)
popoverController.popoverPresentationController?.sourceView = popoverController.view
self.present(popoverController, animated: true, completion: nil)
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
弹出窗口很好,但总是完全在屏幕上。我需要它只是部分可见(如果可能的话,只有前10个像素)。但有些事情阻止了视图控制器的定位。
如何移动弹出窗口以便只显示前10个像素?它看起来应该如下图所示(注意:这是通过编辑图像而不是以编程方式生成的):
答案 0 :(得分:1)
替换它:
popoverController.popoverPresentationController?.sourceView = popoverController.view
用这个:
popoverController.popoverPresentationController?.sourceView = self.view
<强>更新强>
好的,我现在明白了。我的答案是不可能只展示一些popover。
我的建议是使用UITableViewController
作为你的弹出窗口并使其高度足以显示第一行,在这种情况下是文本。
然后,在optional func scrollViewDidScroll(_ scrollView: UIScrollView)
委托方法中,实施逻辑以检测向上滑动以显示并向下滑动以隐藏。
答案 1 :(得分:0)
找到了一种方法,这很容易(事后看来,当然!)。将 self.present(popoverController, animated: true) {
popoverController.popoverPresentationController?.presentedView?.center = CGPoint(x: (self.view.superview?.frame.width)! - desiredWidth - 10, y: (self.view.superview?.frame.height)! + 100)
}
函数的最后一行更改为:
string textFileName = "efsd.txt";
ofstream textFile(textFileName.c_str());
string directory;
我将获得一个特定的数字,而不是使用100,但视图移动到这个位置没有任何问题。