自定义视图的构建
在很多iOS产品或者一些应用版本的升级中,新手指导(引导页面)都是一个常用的功能,通过说明页的左右滑动,可以很清晰的展示系统的一些功能特性。制作思路如下:
这里介绍两种我个人认为实用性比较高的的方式,制作思路如下:
1.1滑动后直接跳转到主界面(没有UIPageControl)
(1)如何检测应用是第一次登陆启动
我们可以使用NSUserDefaults类来解决这个问题。其特点是不会因应用的关闭、系统的重启而丢失。所以可以用来标记是否启动过。
(2)新手引导视图控制器我们使用UIScrollView
比如我们设置了一套新手引导图共4张,都添加到UIScrollView里,这时UIScrollView的内容宽度是4倍于照片或者屏幕的宽度。
效果图:
1.2滑动到某页,按钮弹出点击后跳转到主界面(有UIPageControl)
(1)如何检测应用是第一次登陆启动
我们可以使用NSUserDefaults类来解决这个问题。其特点是不会因应用的关闭、系统的重启而丢失。所以可以用来标记是否启动过。
(2)新手引导视图控制器我们使用UIScrollView
比如我们设置了一套新手引导图共三张,都添加到UIScrollView里,这时UIScrollView的内容宽度是3倍于照片或者屏幕的宽度。
(3)向ScrollView添加控件,小圆点(UIPageContrl)
(4)动画按钮的实现,点击实现跳转界面
效果图:
2.1实现代码
入口类:AppDelegate.swift
import UIKit import CoreData @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. //增加标识,用于判断是否是第一次启动应用,是的话添加标注"firstLaunch"并将导航控制器设置为根视图 if (!NSUserDefaults.standardUserDefaults().boolForKey("firstLaunch")) { NSUserDefaults.standardUserDefaults().setBool(true, forKey: "firstLaunch") let scrollerViewController = ScrollerViewController() //把导航控制器设置为根视图 self.window!.rootViewController = scrollerViewController print("ScrollerView launched!") } return true }
2.2向导页面:ScrollerViewController.swift
注意:两种实现方式都在代码中,此应用代码为第二种实现方式(带UIPageControl和点击Btn实现页面跳转主页面)
当需要实现第一种实现方式(直接滑动到页尾直接跳转到主页面):
step1:将UIPageContrl和UIButton相关代码注释
step2:将最后一段"直接滑动不需要点击,注释UIPageControl和UIButton,并解除这段注释即可"代码解除注释即可
import UIKit class ScrollerViewController: UIViewController,UIScrollViewDelegate { let pageControl = UIPageControl() var numOfPages = 4 //scrollView的初始化 let scrollView = UIScrollView() let Btn = UIButton() override func viewDidLoad() { super.viewDidLoad() //pageContrller位置设定 pageControl.center = CGPoint(x: self.view.frame.width/2, y: self.view.frame.height-30) //当前颜色 pageControl.currentPageIndicatorTintColor = UIColor.blueColor() //其余页码标点颜色 pageControl.pageIndicatorTintColor = UIColor.whiteColor() //标点数 pageControl.numberOfPages = 4 //滑动相应动作 pageControl.addTarget(self, action: "scrollViewDidScroll", forControlEvents: UIControlEvents.ValueChanged) let frame = self.view.bounds //scrollView的框架大小等于当前控制器视图的边界大小 scrollView.frame = self.view.bounds scrollView.delegate = self //为了能让内容横向滚动,设置横向内容宽度为3个页面的宽度总和 scrollView.contentSize = CGSize(width: frame.size.width*CGFloat(numOfPages), height: frame.size.height) print("\(frame.size.width*CGFloat(numOfPages)),\(frame.size.height)") //pagingEnabled 是否自动滚动到subView边界 scrollView.pagingEnabled = true //bounces 默认是YES,就是滚动超过边界会反弹,即有反弹回来的效果。若是NO,则滚动到达边界会立刻停止 scrollView.bounces = true //滚动时是否显示水平滚动条 scrollView.showsHorizontalScrollIndicator = false //滚动时是否显示垂直滚动条 scrollView.showsVerticalScrollIndicator = false //是否可控制控件滚动到顶部 scrollView.scrollsToTop = false scrollView.contentOffset = CGPoint.zero self.view.addSubview(scrollView) for i in 0..<numOfPages{ let image = UIImage(named: "Welcome\(i+1)") let imageView = UIImageView(image: image) //框架大小为控制器视图大小,滑动范围为x轴方向i个控制器视图大小 imageView.frame = CGRect(x: frame.size.width*CGFloat(i), y: CGFloat(0), width: frame.size.width, height: frame.size.height) scrollView.addSubview(imageView) self.view.addSubview(pageControl) } // Do any additional setup after loading the view. } //scrollview滚动的时候就会调用 func scrollViewDidScroll(scrollView: UIScrollView) { let index = Int(scrollView.contentOffset.x/self.view.frame.size.width) print("scrolled:\(scrollView.contentOffset)") pageControl.currentPage = index //添加Btn if index == 3{ //理解UIView的空间坐标系,原点在左上角x轴向右,y轴向下 self.Btn.frame = CGRect(x: 3*self.view.frame.width, y: self.view.frame.height, width: self.view.frame.width, height: 50) self.Btn.setTitle("开启Swift之旅", forState: UIControlState.Normal) self.Btn.titleLabel?.font = UIFont.systemFontOfSize(20.0) self.Btn.setTitleColor(UIColor.grayColor(), forState: UIControlState.Highlighted) self.Btn.backgroundColor = UIColor.orangeColor() self.Btn.alpha = 0 self.Btn.addTarget(self, action: "BtnClick:", forControlEvents: .TouchUpInside) UIView.animateWithDuration(1.5, delay: 0.5, options: .CurveEaseIn, animations: {() -> Void in self.Btn.frame = CGRect(x: 3*self.view.frame.width, y: self.view.frame.height-100, width: self.view.frame.width, height: 50) self.Btn.alpha = 1 self.scrollView.addSubview(self.Btn) }, completion: nil) } // 直接滑动不需要点击,注释UIPageControl和UIButton,并解除这段注释即可 // let twidth = CGFloat(numOfPages-1)*self.view.frame.size.width // //如果在最后一个页面继续滑动的话就会跳转主页面 // if(scrollView.contentOffset.x > twidth){ // let mainStoryboard = UIStoryboard(name:"Main", bundle:nil) // let homePage = mainStoryboard.instantiateViewControllerWithIdentifier("homePage1") // self.presentViewController(homePage, animated: false, completion: nil) // } } func BtnClick(button:UIButton){ let mainStoryboard = UIStoryboard(name:"Main", bundle:nil) let homePage = mainStoryboard.instantiateViewControllerWithIdentifier("homePage1") self.presentViewController(homePage, animated: false, completion: nil) }
最后声明此篇文章结合航哥网站的资料:
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_673.html