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 – 将滚动按钮添加到滚动视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)