使用页控件可以用来展示多个桌面。比如很多应用第一次登陆时,会在开始页面使用页控件来介绍功能,通过左右滑动来切换页。
通常我们使用UIPageControl和UIScrollView相互结合来实现多页切换,滑动页面时页控件标签(即页面下方的小白点)会更新到对应的页面。而直接点击页标签时,滚动条也会滚到相应的页。
( UIPageControl的当前页小圆点和非当前小圆点的颜色是可以设置的,同时如果只有一页的时候也可以选择是否显示圆点)
效果图如下:
![](http://www.hangge.com/blog_uploads/201502/2015021215130760516.png)
![](http://www.hangge.com/blog_uploads/201502/2015021215132060047.png)
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | import UIKit class ViewController : UIViewController , UIScrollViewDelegate { //界面设计元素引用 @IBOutlet var pageControl: UIPageControl ! @IBOutlet var scrollView: UIScrollView ! //需要显示的页面内容 var courses = [ [ "name" : "Swift" , "pic" : "swift.png" ], [ "name" : "ObjectC" , "pic" : "oc.jpg" ], [ "name" : "Java" , "pic" : "java.png" ] ] override func viewDidLoad() { super .viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //设置scrollView的内容总尺寸 scrollView.contentSize = CGSizeMake ( CGFloat ( CGRectGetWidth ( self .view.bounds)) * CGFloat ( self .courses.count), CGRectGetHeight ( self .view.bounds) ) //关闭滚动条显示 scrollView.showsHorizontalScrollIndicator = false scrollView.showsVerticalScrollIndicator = false scrollView.scrollsToTop = false //协议代理,在本类中处理滚动事件 scrollView.delegate = self //滚动时只能停留到某一页 scrollView.pagingEnabled = true //添加页面到滚动面板里 let size = scrollView.bounds.size for (seq,course) in enumerate (courses) { var page = UIView () var imageView= UIImageView (image: UIImage (named:course[ "pic" ]!)) page.addSubview(imageView); page.backgroundColor = UIColor .greenColor() let lbl = UILabel (frame: CGRect (x: 0, y: 20, width: 100, height: 20)) lbl.text = course[ "name" ] page.addSubview(lbl) page.frame = CGRect (x: CGFloat (seq) * size.width, y: 0, width: size.width, height: size.height) scrollView.addSubview(page) } //页控件属性 pageControl.backgroundColor = UIColor .clearColor() pageControl.numberOfPages = courses.count pageControl.currentPage = 0 //设置页控件点击事件 pageControl.addTarget( self , action: "pageChanged:" , forControlEvents: UIControlEvents . ValueChanged ) } override func didReceiveMemoryWarning() { super .didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //UIScrollViewDelegate方法,每次滚动结束后调用 func scrollViewDidEndDecelerating(scrollView: UIScrollView !) { //通过scrollView内容的偏移计算当前显示的是第几页 let page = Int (scrollView.contentOffset.x / scrollView.frame.size.width) //设置pageController的当前页 pageControl.currentPage = page } //点击页控件时事件处理 func pageChanged(sender: UIPageControl ) { //根据点击的页数,计算scrollView需要显示的偏移量 var frame = scrollView.frame frame.origin.x = frame.size.width * CGFloat (sender.currentPage) frame.origin.y = 0 //展现当前页面内容 scrollView.scrollRectToVisible(frame, animated: true ) } } |
--- Main.storyboard ---
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <? xml version = "1.0" encoding = "UTF-8" standalone = "no" ?> < document type = "com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version = "3.0" toolsVersion = "6154.21" systemVersion = "13D65" targetRuntime = "iOS.CocoaTouch" propertyAccessControl = "none" useAutolayout = "YES" useTraitCollections = "YES" initialViewController = "BYZ-38-t0r" > < dependencies > < plugIn identifier = "com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version = "6153.13" /> </ dependencies > < scenes > <!--View Controller--> < scene sceneID = "tne-QT-ifu" > < objects > < viewController id = "BYZ-38-t0r" customClass = "ViewController" customModule = "SwiftInAction_008_019" customModuleProvider = "target" sceneMemberID = "viewController" > < layoutGuides > < viewControllerLayoutGuide type = "top" id = "y3c-jy-aDJ" /> < viewControllerLayoutGuide type = "bottom" id = "wfy-db-euE" /> </ layoutGuides > < view key = "view" contentMode = "scaleToFill" id = "8bC-Xf-vdC" > < rect key = "frame" x = "0.0" y = "0.0" width = "480" height = "480" /> < autoresizingMask key = "autoresizingMask" widthSizable = "YES" heightSizable = "YES" /> < subviews > < scrollView clipsSubviews = "YES" multipleTouchEnabled = "YES" contentMode = "scaleToFill" fixedFrame = "YES" translatesAutoresizingMaskIntoConstraints = "NO" id = "MQq-Dc-kWf" > < rect key = "frame" x = "0.0" y = "20" width = "320" height = "460" /> </ scrollView > < pageControl opaque = "NO" contentMode = "scaleToFill" fixedFrame = "YES" contentHorizontalAlignment = "center" contentVerticalAlignment = "center" numberOfPages = "3" translatesAutoresizingMaskIntoConstraints = "NO" id = "Rre-R2-IHS" > < rect key = "frame" x = "150" y = "339" width = "60" height = "37" /> < color key = "pageIndicatorTintColor" white = "0.66666666666666663" alpha = "1" colorSpace = "calibratedWhite" /> </ pageControl > </ subviews > < color key = "backgroundColor" white = "1" alpha = "1" colorSpace = "custom" customColorSpace = "calibratedWhite" /> < simulatedOrientationMetrics key = "simulatedOrientationMetrics" orientation = "landscapeRight" /> </ view > < connections > < outlet property = "pageControl" destination = "Rre-R2-IHS" id = "R3n-tp-UIl" /> < outlet property = "scrollView" destination = "MQq-Dc-kWf" id = "scK-rG-Yia" /> </ connections > </ viewController > < placeholder placeholderIdentifier = "IBFirstResponder" id = "dkx-z0-nzr" sceneMemberID = "firstResponder" /> </ objects > </ scene > </ scenes > </ document > |