iOS UIScrollView的使用方法

UIScrollView的詳細(xì)使用

創(chuàng)建實例對象并初始化

let scrollView = UIScrollVeiw(frame: self.view.frame)

let subViewOne = UIView(frame: self.view.frame)

let subViewTwo = UIView(frame: CGReact(x: self.view.frame.size.width, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))

scrollView.addSubView(subViewOne)

scrollView.addSubView(subViewTwo)

scrollView.contentSize = CGSize(width: self.view.frame.size.width * 2, height: self.view.frame.size.height)?

scrollView.alwaysBounceVertical = true

scrollView.alwaysBounceHorizontal = true

scrollView.bouns = true

scrollView.showsVerticalScrollIndicator = true

scrollView.showsHorizontalScrollIndicator = false

scrollView.isPagingEnabled = true

常見的代理方法

1 滑動過程中?scrollViewDidScroll(scrollView: UIScrollView)

2?開始拖動?scrollViewWillBeginDragging(scrollView: UIScrollView)

3?開始拖動(以某種速率和偏移量) ?scrollViewDidEndDecelerating(scrollView: UIScrollView)

4?停止拖動?scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool)

5?開始滑動?scrollViewWillBeginDecelerating(scrollView: UIScrollView)

代碼如下:

//

//? ViewController.swift

//? ScrollView

//

//? Created by swift on 2019/12/31.

//? Copyright ? 2019 kydqitb. All rights reserved.

//

importUIKit

class ViewController: UIViewController, UIScrollViewDelegate {

? ? letview1=UIView()

? ? letview2=UIView()

? ? letview3=UIView()

? ??override func viewDidLoad() {

? ? ? ? super.viewDidLoad()

? ? ? ? // Do any additional setup after loading the view.

? ? ? ? addTitleLabel()

?? ? ? ?setViews()

? ? ? ? addScrollView()

? ? }

? ? func addTitleLabel() {

? ? ? ? lettitle =UILabel(frame:CGRect(x:0, y:40, width:self.view.frame.width, height:40))

? ? ? ? title.textAlignment = .center

? ? ? ? title.text = "UIScrollView基礎(chǔ)使用"

? ? ? ? self.view.addSubview(title)

? ? }

? ??func addScrollView() {

? ? ? ? letscrollView =UIScrollView()

? ? ? ? view.addSubview(scrollView)

? ? ? ? addAutoLayout(obj: scrollView)

?? ? ? ?scrollView.delegate=self;

? ? ? ? //設(shè)置scrollView的背景顏色

? ? ? ? scrollView.backgroundColor=UIColor.red

? ? ? ? scrollView.contentSize=CGSize(width:view.frame.width, height:500*4)// ContentSize屬性,滑動內(nèi)容寬度和高度

//修改滑動光標(biāo)的顏色

? ? ? ? /**

? ? ? ? ? default // 默認(rèn)灰色廣標(biāo)

? ? ? ? ? black // 黑色光標(biāo)

? ? ? ? ? white // 白色光標(biāo)

?? ? ? ? */

? ? ? ? scrollView.indicatorStyle = UIScrollView.IndicatorStyle.black

? ? ? ? //true滑動到邊緣時光標(biāo)具有反彈效果(光標(biāo)變短)

? ? ? ? scrollView.bounces=true

? ? ? ? //分頁效果 每次移動一個格

?? ? ? ?scrollView.contentOffset=CGPoint(x:50, y:500)

? ? ? // 顯?示?水平滾動條(默認(rèn)為true)

? ? ? ? scrollView.showsHorizontalScrollIndicator = true

? ? ? ? //顯?示垂直滾動條(默認(rèn)為true)

? ? ? ? scrollView.showsVerticalScrollIndicator = true

? ? ? ? //設(shè)置UIScrollView的縮放大小(默認(rèn)縮放小大為1.0)

? ? ? ? scrollView.minimumZoomScale=0.2

? ? ? ? scrollView.maximumZoomScale=2

? ? ? ? // 縮放回彈(默認(rèn)為true,在超出縮放范圍會有一個回彈效果)

? ? ? ? scrollView.bouncesZoom=true

? // 點擊設(shè)備狀態(tài)欄會自動滾動到頂部

? ? ? ? scrollView.scrollsToTop=true? ? ? ?

?//把view添加到scrollView上

? ? ? ? scrollView.addSubview(view1)

? ? ? ? scrollView.addSubview(view2)

? ? ? ? scrollView.addSubview(view3)

?? ?}


? ? func?setViews() {

? ? ? ? view1.backgroundColor = UIColor.gray

?? ? ? ?view1.frame=CGRect(x:0, y:0, width:view.frame.width, height:500)//此約束相對于scrollView.contentSize大小進(jìn)行約束

? ? ? ?view2.backgroundColor = UIColor.green

?? ? ? view2.frame=CGRect(x:0, y:500, width:view.frame.width, height:500) ? ? ? ? ? ? ??

? ? ? ?view3.backgroundColor = UIColor.blue

? ? ? ? view3.frame=CGRect(x:0, y:1000, width:view.frame.width, height:500)

? ? }

? ?//MARK: - scrollView代理方法

? ? //scrollView滾動時調(diào)用,只要offset的值發(fā)生變化就調(diào)用

? ? funcscrollViewDidScroll(_scrollView:UIScrollView) {

? ? ? ? //打印視圖偏移量

? ? ? ? print("X:\(scrollView.contentOffset.x)")

? ? ? ? print("Y:\(scrollView.contentOffset.y)")

//? ? ? ? print("Y:\()")

? ? }

? ? //返回將要縮放的UIView對象

? ? funcviewForZooming(in scrollView:UIScrollView) ->UIView? {

? ? ? ? print("viewForZooming")

? ? ? ? //遍歷scrollView的子view,找到自己的view

? ? ? ? forsubview:AnyObjectinscrollView.subviews{

? ? ? ? ? ? ifsubview.isKind(of:UIView.self){

? ? ? ? ? ? ? ? returnsubviewas?UIView

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? returnnil

? ? }

? ? //當(dāng)將要開始縮放時,執(zhí)行該方法。一次有效縮放就只執(zhí)行一次

? ? funcscrollViewWillBeginZooming(_scrollView:UIScrollView, with view:UIView?) {

? ? ? ? print("scrollViewWillBeginZooming")

? ? }

? ? //當(dāng)scrollView縮放時,調(diào)用該方法。在縮放過程中,會多次調(diào)用

? ? funcscrollViewDidZoom(_scrollView:UIScrollView) {

? ? ? ? print("scrollViewDidZoom")

? ? }

? ? //當(dāng)縮放結(jié)束后,并且縮放大小回到minimumZoomScale與maximumZoomScale之間后(我們也許會超出縮放范圍),調(diào)用該方法

? ? funcscrollViewDidEndZooming(_scrollView:UIScrollView, with view:UIView?, atScale scale:CGFloat) {

? ? ? ? print("scrollViewDidZoom scale: %f", scale)

? ? }

? ? //指示當(dāng)用戶點擊狀態(tài)欄后,滾動視圖是否能夠滾動到頂部

? ? func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {

? ? ? ? print("scrollViewShouldScrollToTop")

? ? ? ? //返回值:true可以返回到頂端, false不能返回到頂端

? ? ? ? return true

? ? }

? ? //當(dāng)滾動視圖滾動到最頂端后,執(zhí)行該方法

? ? func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {

? ? ? ? print("scrollViewDidScrollToTop")

? ? }

? ? //當(dāng)開始滾動視圖時,執(zhí)行該方法。一次有效滑動只執(zhí)行一次

? ? func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

? ? ? ? print("scrollViewWillBeginDragging")

? ? }

? ? //當(dāng)開始滾動視圖時,執(zhí)行該方法。一次有效滑動只執(zhí)行一次

? ? funcscrollViewDidEndDragging(_scrollView:UIScrollView, willDecelerate decelerate:Bool) {

? ? ? ? print("scrollViewDidEndDragging")

? ? }

? ? //滑動減速時調(diào)用該方法

? ? func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {

? ? ? ? print("scrollViewWillBeginDecelerating")

? ? }

? ? //滾動視圖減速完成,滾動將停止時,調(diào)用該方法。一次有效滑動只執(zhí)行一次

? ? func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

? ? ? ? print("scrollViewDidEndDecelerating")

? ? }

? ? //當(dāng)滾動視圖動畫完成后,調(diào)用該方法,如果沒有動畫,那么該方法將不被調(diào)用

? ? func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {

? ? ? ? print("scrollViewDidEndScrollingAnimation")

? ? }

? ? //滑動scrollView,并且手指離開時執(zhí)行。一次有效滑動只執(zhí)行一次(當(dāng)pagingEnabled屬性為true時,不調(diào)用該方法)

? ? funcscrollViewWillEndDragging(_scrollView:UIScrollView, withVelocity velocity:CGPoint, targetContentOffset:UnsafeMutablePointer) {

? ? ? ? print("scrollViewWillEndDragging")

? ? }

? ? //AutoLayout 自動布局

? ? func?addAutoLayout(obj:UIScrollView) {

? ? //除了AutoLayout,AutoresizingMask也是一種布局方式。當(dāng)我們用AutoLayout代碼添加視圖時默認(rèn)情況下,translatesAutoresizingMaskIntoConstraints = true , 此時視圖的AutoresizingMask會被轉(zhuǎn)換成對應(yīng)效果的約束。這樣很可能就會和我們手動添加的其它約束有沖突。此屬性設(shè)置成false時,AutoresizingMask就不會變成約束。也就是說當(dāng)前視圖的 AutoresizingMask失效了。 避免布局沖突,把此設(shè)置為false

? ? ? ? obj.translatesAutoresizingMaskIntoConstraints = false

? ? ? ? //? ? ? ? 自動布局構(gòu)造函數(shù)

? ? ? ? //? ? ? ? NSLayoutConstraint(item: 視圖,

? ? ? ? //? ? ? ? ? ? ? attribute: 約束屬性,

? ? ? ? //? ? ? ? relatedBy: 約束關(guān)系,

? ? ? ? //? ? ? ? toItem: 參照視圖,

? ? ? ? //? ? ? ? attribute: 參照屬性,

? ? ? ? //? ? ? ? multiplier: 乘積,

? ? ? ? //? ? ? ? constant: 約束數(shù)值)

? ? ? ? //設(shè)置label控件的左邊到self.view的左邊距離為50pt

? ? ? ? let objLeft:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.left, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.left, multiplier: 1.0, constant: 50)

? ? ? ? obj.superview!.addConstraint(objLeft)

? ? ?//設(shè)置label控件的頂部到self.view的頂部距離為100pt

? ? ? ? let objTop:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1.0, constant: 100)

? ? ? ? obj.superview!.addConstraint(objTop)

? ? ?//設(shè)置label控件的右邊到self.view的右邊距離為50pt

? ? ? ? let objRight:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.right, multiplier: 1.0, constant: -50)

? ? ? ? obj.superview!.addConstraint(objRight)

? ? ? ?let objBottom:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1.0, constant: -100)

? ? ? ?obj.superview!.addConstraint(objBottom)

//? ? ? ? //設(shè)置label控件的高度為200pt

//? ? ? ? let objHeight:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute:NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1.0, constant: 400)

//? ? ? ? obj.superview!.addConstraint(objHeight)

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容