ios – UIScrollView的平滑自定义分页

ios – UIScrollView的平滑自定义分页,第1张

概述我在UIScrollView中有两个(可能更多)视图,并希望使用分页.当我尝试使用UIScrollView的默认分页选项时出现问题,因为视图具有不同的宽度,无法正确分页. 所以我已经实现了一个有效的自定义分页代码.但是,当滚动较慢时,它不会按预期运行. (它回到没有动画的原始位置.) 以下是我目前通过UIScrollViewDelegate进行自定义分页的方法 func scrollViewWil 我在UIScrollVIEw中有两个(可能更多)视图,并希望使用分页.当我尝试使用UIScrollVIEw的默认分页选项时出现问题,因为视图具有不同的宽度,无法正确分页.

所以我已经实现了一个有效的自定义分页代码.但是,当滚动较慢时,它不会按预期运行. (它回到没有动画的原始位置.)

以下是我目前通过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    }}

我想要的是:

是)我有的:

@R_403_6120@@H_419_16@ 尝试下面的自定义UIScrollVIEw类示例
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的平滑自定义分页所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1100713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存