gpt4 book ai didi

ios - UIPageViewController - 禁用反弹问题

转载 作者:行者123 更新时间:2023-11-28 07:27:19 28 4
gpt4 key购买 nike

我有一个 PageViewController,目前正在尝试禁用弹跳。我已经找到了一些关于这个问题的线索,但是给定的解决方案禁止反弹到错误的一边。

我有 2 个 ViewControllers,即 homeViewtimelineView - homeView 最初显示并且索引为 0。显示此 View 时,弹跳会停用到两侧并且我无法滑动到下一个 Controller 。

有人看到这个问题吗?

我的代码:

class RootPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIScrollViewDelegate {

lazy var viewControllerList:[UIViewController] = {

let sb = UIStoryboard(name: "Main", bundle: nil)

let vc1 = sb.instantiateViewController(withIdentifier: "homeView")
let vc2 = sb.instantiateViewController(withIdentifier: "timelineView")

return [vc1, vc2]

}()

var currentPage: Int = 0

let defaults = UserDefaults.standard

override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
NotificationCenter.default.addObserver(self, selector: #selector(disableSwipe(_:)), name: Notification.Name(rawValue: "disableSwipe"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(enableSwipe(_:)), name: Notification.Name(rawValue: "enableSwipe"), object: nil)

for subview in self.view.subviews {
if let scrollView = subview as? UIScrollView {
scrollView.delegate = self
break;
}
}

if let secondViewController = viewControllerList.first as? HomeViewController {
self.setViewControllers([secondViewController], direction: .forward, animated: true, completion: nil)
...
}
}

...

func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(currentPage, viewControllerList.count)
if (currentPage == 0 && scrollView.contentOffset.x < scrollView.bounds.size.width) {
scrollView.contentOffset = CGPoint(x: scrollView.bounds.size.width, y: 0);
} else if (currentPage == viewControllerList.count - 1 && scrollView.contentOffset.x > scrollView.bounds.size.width) {
scrollView.contentOffset = CGPoint(x: scrollView.bounds.size.width, y: 0);
}
}

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

if (currentPage == 0 && scrollView.contentOffset.x <= scrollView.bounds.size.width) {
targetContentOffset.pointee = CGPoint(x: scrollView.bounds.size.width, y: 0);
} else if (currentPage == viewControllerList.count - 1 && scrollView.contentOffset.x >= scrollView.bounds.size.width) {
targetContentOffset.pointee = CGPoint(x: scrollView.bounds.size.width, y: 0);
}
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

guard let vcIndex = viewControllerList.firstIndex(of: viewController) else { return nil }

let previousIndex = vcIndex - 1
guard previousIndex >= 0 else { return nil }

guard viewControllerList.count > previousIndex else { return nil }

currentPage = previousIndex
return viewControllerList[previousIndex]
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

guard let vcIndex = viewControllerList.firstIndex(of: viewController) else { return nil }

let nextIndex = vcIndex + 1

guard viewControllerList.count != nextIndex else { return nil }

guard viewControllerList.count > nextIndex else { return nil }

currentPage = nextIndex
return viewControllerList[nextIndex]
}
}

最佳答案

据我了解,您只是不希望页面 Controller 的 UIScrollView 在最后弹跳,对吗?在这种情况下,您应该尝试设置 scrollView.bounces = false。 ( https://developer.apple.com/documentation/uikit/uiscrollview/1619420-bounces )

关于ios - UIPageViewController - 禁用反弹问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com