ios – 将滚动按钮添加到滚动视图

ios – 将滚动按钮添加到滚动视图,第1张

概述我想在scrollview中滚动五个按钮.当用户停止拖动按钮时,应该移动到下一个按钮.我在这里做错了什么? class ViewController: UIViewController { @IBOutlet weak var categoryScrollView: UIScrollView! var categoryArr = ["Jack","Mark","Down","Bi 我想在scrollvIEw中滚动五个按钮.当用户停止拖动按钮时,应该移动到下一个按钮.我在这里做错了什么?
class VIEwController: UIVIEwController {    @IBOutlet weak var categoryScrollVIEw: UIScrollVIEw!    var categoryArr = ["Jack","Mark","Down","Bill","Steve"]    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        let scrollingVIEw = colorbuttonsVIEw(CGSizeMake(150,categoryScrollVIEw.frame.size.height),buttonCount: 5)        categoryScrollVIEw.contentSize = scrollingVIEw.frame.size        categoryScrollVIEw.addSubvIEw(scrollingVIEw)        categoryScrollVIEw.showsverticalScrollindicator = false        categoryScrollVIEw.delegate = self        categoryScrollVIEw.pagingEnabled = true        categoryScrollVIEw.indicatorStyle = .Default    }func colorbuttonsVIEw(buttonSize:CGSize,buttonCount:Int) -> UIVIEw {        let buttonVIEw = UIVIEw()        buttonVIEw.frame.origin = CGPointMake(0,0)        let padding = CGSizeMake(10,10)        buttonVIEw.frame.size.wIDth = (buttonSize.wIDth + padding.wIDth) * CGfloat(buttonCount)        var buttonposition = CGPointMake(padding.wIDth * 0.5,padding.height)        let buttonIncrement = buttonSize.wIDth + padding.wIDth        for i in 0...(buttonCount - 1)  {            var button = UIbutton.buttonWithType(.Custom) as! UIbutton            button.frame.size = buttonSize            button.frame.origin = buttonposition            buttonposition.x = buttonposition.x + buttonIncrement            button.setTitle(categoryArr[i],forState: UIControlState.normal)            buttonVIEw.addSubvIEw(button)        }        return buttonVIEw    }}extension VIEwController:uiscrollviewdelegate{    func scrollVIEwDIDEndDecelerating(scrollVIEw: UIScrollVIEw) {        let index = round(scrollVIEw.contentOffset.x / scrollVIEw.frame.size.wIDth)        print(index)    }}

滚动浏览很好..但只有两次.它不滚动到下一个按钮.我该怎么办?

解决方法
func setContentOffset(scrollVIEw: UIScrollVIEw) {    let numOfItems = itemCount  // 5    let stopOver = scrollVIEw.contentSize.wIDth / CGfloat(numOfItems)    let x = round(scrollVIEw.contentOffset.x / stopOver) * stopOver    guard x >= 0 && x <= scrollVIEw.contentSize.wIDth - scrollVIEw.frame.wIDth else {        return    }    scrollVIEw.setContentOffset(CGPointMake(x,scrollVIEw.contentOffset.y),animated: true)}
extension VIEwController: uiscrollviewdelegate {    func scrollVIEwWillBeginDecelerating(scrollVIEw: UIScrollVIEw) {        setContentOffset(scrollVIEw)    }    func scrollVIEwDIDEndDragging(scrollVIEw: UIScrollVIEw,willDecelerate decelerate: Bool) {        guard !decelerate else {            return        }        setContentOffset(scrollVIEw)    }}

还在Github https://github.com/rishi420/ScrollViewCustomPaging中做了一个演示项目

更新:

尝试在用户endDragging时考虑滚动速度.

var veLocityX = CGfloat(0.0)

.

func setContentOffset(scrollVIEw: UIScrollVIEw) {    let numOfItems = itemCount    let stopOver = scrollVIEw.contentSize.wIDth / CGfloat(numOfItems)    var x = round((scrollVIEw.contentOffset.x + (veLocityX * 150)) / stopOver) * stopOver // 150 is for test. Change it for your liking    x = max(0,min(x,scrollVIEw.contentSize.wIDth - scrollVIEw.frame.wIDth))    scrollVIEw.setContentOffset(CGPointMake(x,animated: true)}

.

func scrollVIEwWillEndDragging(scrollVIEw: UIScrollVIEw,withVeLocity veLocity: CGPoint,targetContentOffset: UnsafeMutablePointer<CGPoint>){    veLocityX = veLocity.x}
总结

以上是内存溢出为你收集整理的ios – 将滚动按钮添加到滚动视图全部内容,希望文章能够帮你解决ios – 将滚动按钮添加到滚动视图所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1112320.html

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

发表评论

登录后才能评论

评论列表(0条)

保存