所以我已经实现了一个有效的自定义分页代码.但是,当滚动较慢时,它不会按预期运行. (它回到没有动画的原始位置.)
以下是我目前通过uiscrollviewdelegate进行自定义分页的方法
func scrollVIEwWillEndDragging(_ scrollVIEw: UIScrollVIEw,withVeLocity veLocity: CGPoint,targetContentOffset: UnsafeMutablePointer<CGPoint>) { if direction == 1{ targetContentOffset.pointee.x = 0 }else{ targetContentOffset.pointee.x = 100 }}func scrollVIEwWillBeginDragging(_ scrollVIEw: UIScrollVIEw) { if scrollVIEw.panGestureRecognizer.translation(in: scrollVIEw.supervIEw).x > 0 { direction = 1 } else { direction = 0 }}
我想要的是:
是)我有的:
import UIKitpublic class BaseScrollVIEwController: UIVIEwController,uiscrollviewdelegate { public var leftVc: UIVIEwController! public var mIDdleVc: UIVIEwController! public var rightVc: UIVIEwController! public var initialContentOffset = CGPoint() // scrollVIEw initial offset public var maximumWIDthFirstVIEw : CGfloat = 0 public var scrollVIEw: UIScrollVIEw! public class func containerVIEwWith(_ leftVC: UIVIEwController,mIDdleVC: UIVIEwController,rightVC: UIVIEwController) -> BaseScrollVIEwVIEwController { let container = BaseScrollVIEwVIEwController() container.leftVc = leftVC container.mIDdleVc = mIDdleVC container.rightVc = rightVC return container } overrIDe public func vIEwDIDLoad() { super.vIEwDIDLoad() setuphorizontalscrollview() } func setuphorizontalscrollview() { scrollVIEw = UIScrollVIEw() scrollVIEw.isPagingEnabled = true scrollVIEw.showsHorizontalScrollindicator = false scrollVIEw.bounces = false let vIEw = ( x: self.vIEw.bounds.origin.x,y: self.vIEw.bounds.origin.y,wIDth: self.vIEw.bounds.wIDth,height: self.vIEw.bounds.height ) scrollVIEw.frame = CGRect(x: vIEw.x,y: vIEw.y,wIDth: vIEw.wIDth,height: vIEw.height ) self.vIEw.addSubvIEw(scrollVIEw) let scrollWIDth = 3 * vIEw.wIDth let scrollHeight = vIEw.height scrollVIEw.contentSize = CGSize(wIDth: scrollWIDth,height: scrollHeight) leftVc.vIEw.frame = CGRect(x: 0,y: 0,height: vIEw.height ) mIDdleVc.vIEw.frame = CGRect(x: vIEw.wIDth,height: vIEw.height ) rightVc.vIEw.frame = CGRect(x: 2 * vIEw.wIDth,height: vIEw.height ) addChildVIEwController(leftVc) addChildVIEwController(mIDdleVc) addChildVIEwController(rightVc) scrollVIEw.addSubvIEw(leftVc.vIEw) scrollVIEw.addSubvIEw(mIDdleVc.vIEw) scrollVIEw.addSubvIEw(rightVc.vIEw) leftVc.dIDMove(toparentVIEwController: self) mIDdleVc.dIDMove(toparentVIEwController: self) rightVc.dIDMove(toparentVIEwController: self) scrollVIEw.contentOffset.x = mIDdleVc.vIEw.frame.origin.x scrollVIEw.delegate = self } public func scrollVIEwWillBeginDragging(_ scrollVIEw: UIScrollVIEw) { self.initialContentOffset = scrollVIEw.contentOffset } public func scrollVIEwDIDScroll(_ scrollVIEw: UIScrollVIEw) { if maximumWIDthFirstVIEw != 0 { if scrollVIEw.contentOffset.x < maximumWIDthFirstVIEw { scrollVIEw.isScrollEnabled = false let newOffset = CGPoint(x: maximumWIDthFirstVIEw,y: self.initialContentOffset.y) self.scrollVIEw!.setContentOffset(newOffset,animated: false) scrollVIEw.isScrollEnabled = true } } }}
使用BaseScrollVIEwController
let left = FirstController.init()let mIDdle = MIDdleController()let right = RightController.init()let container = BaseScrollVIEwController.containerVIEwWith(left,mIDdleVC: mIDdle,rightVC: right)container.maximumWIDthFirstVIEw = 150
输出:
GitHub要点示例代码:https://gist.github.com/mspvirajpatel/58dac2fae0d3b4077a0cb6122def6570
总结以上是内存溢出为你收集整理的ios – UIScrollView的平滑自定义分页全部内容,希望文章能够帮你解决ios – UIScrollView的平滑自定义分页所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)