ios – 禁用UIPageViewController弹跳 – Swift [复制]

前端之家收集整理的这篇文章主要介绍了ios – 禁用UIPageViewController弹跳 – Swift [复制]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Disable UIPageViewController bounce8个
我一直在制作一个在UIViewControllers之间滚动的示例应用程序,但重点是我想在滚动结束时和返回第一个UIViewController时禁用弹跳效果.

这是我的代码

  1. class PageViewController: UIPageViewController,UIPageViewControllerDataSource,UIPageViewControllerDelegate{
  2.  
  3. var index = 0
  4. var identifiers: NSArray = ["FirstNavigationController","SecondNavigationController"]
  5. override func viewDidLoad() {
  6.  
  7. self.dataSource = self
  8. self.delegate = self
  9.  
  10. let startingViewController = self.viewControllerAtIndex(self.index)
  11.  
  12. let viewControllers: NSArray = [startingViewController]
  13. self.setViewControllers(viewControllers as [AnyObject],direction: UIPageViewControllerNavigationDirection.Forward,animated: false,completion: nil)
  14. }
  15.  
  16. func viewControllerAtIndex(index: Int) -> UINavigationController! {
  17.  
  18. let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle:nil)
  19. //first view controller = firstViewControllers navigation controller
  20. if index == 0 {
  21.  
  22. return storyBoard.instantiateViewControllerWithIdentifier("FirstNavigationController") as! UINavigationController
  23.  
  24. }
  25.  
  26. //second view controller = secondViewController's navigation controller
  27. if index == 1 {
  28.  
  29. return storyBoard.instantiateViewControllerWithIdentifier("SecondNavigationController") as! UINavigationController
  30. }
  31.  
  32. return nil
  33. }
  34. func pageViewController(pageViewController: UIPageViewController,viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
  35.  
  36. let identifier = viewController.restorationIdentifier
  37. let index = self.identifiers.indexOfObject(identifier!)
  38.  
  39. //if the index is the end of the array,return nil since we dont want a view controller after the last one
  40. if index == identifiers.count - 1 {
  41.  
  42. return nil
  43. }
  44.  
  45. //increment the index to get the viewController after the current index
  46. self.index = self.index + 1
  47. return self.viewControllerAtIndex(self.index)
  48.  
  49. }
  50.  
  51. func pageViewController(pageViewController: UIPageViewController,viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
  52.  
  53. let identifier = viewController.restorationIdentifier
  54. let index = self.identifiers.indexOfObject(identifier!)
  55.  
  56. //if the index is 0,return nil since we dont want a view controller before the first one
  57. if index == 0 {
  58.  
  59. return nil
  60. }
  61.  
  62. //decrement the index to get the viewController before the current one
  63. self.index = self.index - 1
  64. return self.viewControllerAtIndex(self.index)
  65.  
  66. }
  67.  
  68. }

看看这里:

解决方法

我不知道你能不能. UIPageController不是很容易定制的.

就个人而言,当我想在UIViewController之间滚动时,我更喜欢使用一个简单的UIViewController,它将是一个容器,里面有一个UIScrollView.然后我以编程方式添加UIScrollView的contentSize中的所有控制器.您必须将所有控制器添加为容器的子级.

更新iOS 9

  1. func setupDetailViewControllers() {
  2. var prevIoUsController: UIViewController?
  3. for controller in self.controllers {
  4. addChildViewController(controller)
  5. addControllerInContentView(controller,prevIoUsController: prevIoUsController)
  6. controller.didMoveToParentViewController(self)
  7. prevIoUsController = controller
  8. }
  9. }
  10.  
  11. func addControllerInContentView(controller: UIViewController,prevIoUsController: UIViewController?) {
  12. contentView.addSubview(controller.view)
  13. controller.view.translatesAutoresizingMaskIntoConstraints = false
  14.  
  15. // top
  16. controller.view.topAnchor.constraintEqualToAnchor(contentView.topAnchor).active = true
  17.  
  18. // bottom
  19. controller.view.bottomAnchor.constraintEqualToAnchor(contentView.bottomAnchor).active = true
  20.  
  21. // trailing
  22. trailingContentViewConstraint?.active = false
  23. trailingContentViewConstraint = controller.view.trailingAnchor.constraintEqualToAnchor(contentView.trailingAnchor)
  24. trailingContentViewConstraint?.active = true
  25.  
  26. // leading
  27. let leadingAnchor = prevIoUsController?.view.trailingAnchor ?? contentView.leadingAnchor
  28. controller.view.leadingAnchor.constraintEqualToAnchor(leadingAnchor).active = true
  29.  
  30. // width
  31. controller.view.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true
  32. }

以前的答案

像这样:

scrollView是一个IBOutlet,与ContainerViewController的每个边缘都有约束

  1. class ContainerViewController: UIViewController {
  2.  
  3. @IBOutlet var scrollView: UIScrollView!
  4.  
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. scrollView.bounces = false
  8. scrollView.pagingEnabled = true
  9. }
  10.  
  11. override func didReceiveMemoryWarning() {
  12. super.didReceiveMemoryWarning()
  13.  
  14. }
  15.  
  16. override func viewDidLayoutSubviews() {
  17. initScrollView()
  18. }
  19.  
  20. func initScrollView(){
  21. let viewController1 = storyboard?.instantiateViewControllerWithIdentifier("ViewController1") as! ViewController1
  22.  
  23. viewController1.willMoveToParentViewController(self)
  24. viewController1.view.frame = scrollView.bounds
  25.  
  26. let viewController2 = storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
  27.  
  28. viewController2.willMoveToParentViewController(self)
  29. viewController2.view.frame.size = scrollView.frame.size
  30. viewController2.view.frame.origin = CGPoint(x: view.frame.width,y: 0)
  31.  
  32. scrollView.contentSize = CGSize(width: 2 * scrollView.frame.width,height: scrollView.frame.height)
  33.  
  34. scrollView.addSubview(viewController2.view)
  35. self.addChildViewController(viewController2)
  36. viewController2.didMoveToParentViewController(self)
  37.  
  38. scrollView.addSubview(viewController1.view)
  39. self.addChildViewController(viewController1)
  40. viewController1.didMoveToParentViewController(self)
  41. }}

猜你在找的iOS相关文章