我的 pageviewcontroller 手势是否被拦截?
Are my pageviewcontroller gestures being intercepted?
我已按照页面viewcontroller 教程创建图像滑块。然后我将其调整为插入 tableviewcell,因为我想要 table.
中的图像滑块
我喜欢在全屏或嵌入到另一个视图中使用相同代码的想法。
但是,当我这样做时,pageviewafter 和 pageviewbefore 事件不会在滑动时触发。我怀疑 tableviewcontroller 或单元正在吞噬事件,因此页面 viewcontroller 没有收到它们。
我充其量是兼职 ios 开发人员,所以寻找任何建议我可以检查 out/overcome 我的问题。
根据要求提供了一些代码细节。在检索图像的回调完成后,我正在添加我的 PageViewController。 plantPhotoContainerView 是静态单元格内的 UIView,随故事板一起添加。
self.plantPhotoContainerView.addSubview(vc.view)
页面viewcontroller 将委托设置为自身,我目前忽略了控制器中传递的图像,只使用了一些测试图像:
class ImageSliderViewController: UIPageViewController, UIPageViewControllerDataSource {
init(images: [String]) {
super.init(transitionStyle: UIPageViewController.TransitionStyle.scroll, navigationOrientation: UIPageViewController.NavigationOrientation.horizontal, options: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var images = ["Growers", "Home", "Media"]
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
view.backgroundColor = UIColor.yellow
let imageViewController = ImageViewController()
imageViewController.imageName = images.first
let viewControllers = [imageViewController]
setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)
}
override func viewDidLayoutSubviews() {
self.view.translatesAutoresizingMaskIntoConstraints = false
view.leftAnchor.constraint(equalTo: view.superview!.leftAnchor).isActive = true
view.rightAnchor.constraint(equalTo: view.superview!.rightAnchor).isActive = true
view.topAnchor.constraint(equalTo: view.superview!.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: view.superview!.bottomAnchor).isActive = true
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentImageName = (viewController as! ImageViewController).imageName!
let currentIndex = images.firstIndex(of: currentImageName)!
if currentIndex < images.count - 1 {
let imageViewController = ImageViewController()
imageViewController.imageName = images[currentIndex + 1]
return imageViewController
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentImageName = (viewController as! ImageViewController).imageName!
let currentIndex = images.firstIndex(of: currentImageName)!
if currentIndex > 0 {
let imageViewController = ImageViewController()
imageViewController.imageName = images[currentIndex - 1]
return imageViewController
}
return nil
}
}
好的,我最终找到了一个 post,这对我很有帮助。添加子视图时,需要额外两行才能将默认手势功能传递给 pageviewcontroller。希望这对其他人有帮助。
self.addChild(vc)
self.plantPhotoContainerView.addSubview(vc.view)
vc.didMove(toParent: self)
老实说,我不太明白这是做什么的,也许更精通swift框架的人可以详细说明。
我已按照页面viewcontroller 教程创建图像滑块。然后我将其调整为插入 tableviewcell,因为我想要 table.
中的图像滑块我喜欢在全屏或嵌入到另一个视图中使用相同代码的想法。
但是,当我这样做时,pageviewafter 和 pageviewbefore 事件不会在滑动时触发。我怀疑 tableviewcontroller 或单元正在吞噬事件,因此页面 viewcontroller 没有收到它们。
我充其量是兼职 ios 开发人员,所以寻找任何建议我可以检查 out/overcome 我的问题。
根据要求提供了一些代码细节。在检索图像的回调完成后,我正在添加我的 PageViewController。 plantPhotoContainerView 是静态单元格内的 UIView,随故事板一起添加。
self.plantPhotoContainerView.addSubview(vc.view)
页面viewcontroller 将委托设置为自身,我目前忽略了控制器中传递的图像,只使用了一些测试图像:
class ImageSliderViewController: UIPageViewController, UIPageViewControllerDataSource {
init(images: [String]) {
super.init(transitionStyle: UIPageViewController.TransitionStyle.scroll, navigationOrientation: UIPageViewController.NavigationOrientation.horizontal, options: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var images = ["Growers", "Home", "Media"]
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
view.backgroundColor = UIColor.yellow
let imageViewController = ImageViewController()
imageViewController.imageName = images.first
let viewControllers = [imageViewController]
setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)
}
override func viewDidLayoutSubviews() {
self.view.translatesAutoresizingMaskIntoConstraints = false
view.leftAnchor.constraint(equalTo: view.superview!.leftAnchor).isActive = true
view.rightAnchor.constraint(equalTo: view.superview!.rightAnchor).isActive = true
view.topAnchor.constraint(equalTo: view.superview!.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: view.superview!.bottomAnchor).isActive = true
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentImageName = (viewController as! ImageViewController).imageName!
let currentIndex = images.firstIndex(of: currentImageName)!
if currentIndex < images.count - 1 {
let imageViewController = ImageViewController()
imageViewController.imageName = images[currentIndex + 1]
return imageViewController
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentImageName = (viewController as! ImageViewController).imageName!
let currentIndex = images.firstIndex(of: currentImageName)!
if currentIndex > 0 {
let imageViewController = ImageViewController()
imageViewController.imageName = images[currentIndex - 1]
return imageViewController
}
return nil
}
}
好的,我最终找到了一个 post,这对我很有帮助。添加子视图时,需要额外两行才能将默认手势功能传递给 pageviewcontroller。希望这对其他人有帮助。
self.addChild(vc)
self.plantPhotoContainerView.addSubview(vc.view)
vc.didMove(toParent: self)
老实说,我不太明白这是做什么的,也许更精通swift框架的人可以详细说明。