在第一次打开APP或者APP更新后通常用引导页来展示产品特性

我们用NSUserDefaults类来判断程序是不是第一次启动或是否更新,在AppDelegate.swift中加入以下代码:

  1. func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  2. // Override point for customization after application launch.
  3. // 得到当前应用的版本号
  4. let infoDictionary = NSBundle.mainBundle().infoDictionary
  5. let currentAppVersion = infoDictionary!["CFBundleShortVersionString"] as String
  6. let userDefaults = NSUserDefaults.standardUserDefaults()
  7. let appVersion = userDefaults.stringForKey("appVersion")
  8. var storyboard = UIStoryboard(name: "Main", bundle: nil)
  9. // 如果appVersion为nil说明是第一次启动;如果appVersion不等于currentAppVersion说明是更新了
  10. if appVersion == nil || appVersion != currentAppVersion {
  11. userDefaults.setValue(currentAppVersion, forKey: "appVersion")
  12. var guidanceViewController = storyboard.instantiateViewControllerWithIdentifier("GuidanceVC") as GuidanceViewController
  13. self.window!.rootViewController = guidanceViewController
  14. }
  15. return true
  16. }

在GuidanceViewController中,我们用UIScrollView来装载我们的引导页

  1. import UIKit
  2. class GuidanceViewController: UIViewController {
  3. var scrollView: UIScrollView!
  4. @IBOutlet weak var pageControl: UIPageControl!
  5. @IBOutlet weak var startButton: UIButton!
  6. var numOfPages = 4
  7. override func viewDidLoad() {
  8. super.viewDidLoad()
  9. // Do any additional setup after loading the view.
  10. var frame = self.view.bounds
  11. scrollView = UIScrollView()
  12. scrollView.frame = self.view.bounds
  13. scrollView.delegate = self
  14. // scrollView的contentSize设为屏幕宽度的4(我这里设了四张引导页)倍
  15. scrollView.contentSize = CGSizeMake(frame.size.width * CGFloat(numOfPages), frame.size.height)
  16. scrollView.pagingEnabled = true
  17. scrollView.showsHorizontalScrollIndicator = false
  18. scrollView.showsVerticalScrollIndicator = false
  19. scrollView.scrollsToTop = false
  20. for i in 0..<numOfPages {
  21. var image = UIImage(named: "Guidance\(i + 1)")
  22. var imageView = UIImageView(image: image)
  23. imageView.frame = CGRectMake(frame.size.width * CGFloat(i), 0, frame.size.width, frame.size.height)
  24. scrollView.addSubview(imageView)
  25. }
  26. scrollView.contentOffset = CGPointZero
  27. self.view.addSubview(scrollView)
  28. startButton.alpha = 0.0
  29. // 将这两个控件拿到视图的最上面
  30. self.view.bringSubviewToFront(pageControl)
  31. self.view.bringSubviewToFront(startButton)
  32. }
  33. override func didReceiveMemoryWarning() {
  34. super.didReceiveMemoryWarning()
  35. // Dispose of any resources that can be recreated.
  36. }
  37. @IBAction func start(sender: AnyObject) {
  38. var storyboard = UIStoryboard(name: "Main", bundle: nil)
  39. var viewController = storyboard.instantiateViewControllerWithIdentifier("LoginVC") as LoginViewController
  40. viewController.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve
  41. presentViewController(viewController, animated: true, completion: nil)
  42. }
  43. }

最后我们让GuidanceViewController遵循UIScrollViewDelegate协议,在这里判断是否滑动到最后一张以显示进入按钮。

  1. // MARK: - UIScrollViewDelegate
  2. extension GuidanceViewController: UIScrollViewDelegate {
  3. func scrollViewDidScroll(scrollView: UIScrollView) {
  4. var offset = scrollView.contentOffset
  5. // 随着滑动改变pageControl的状态
  6. pageControl.currentPage = Int(offset.x / view.bounds.width)
  7. // 因为currentPage是从0开始,所以numOfPages减1
  8. if pageControl.currentPage == numOfPages - 1 {
  9. UIView.animateWithDuration(0.5) {
  10. self.startButton.alpha = 1.0
  11. }
  12. } else {
  13. UIView.animateWithDuration(0.5) {
  14. self.startButton.alpha = 0.0
  15. }
  16. }
  17. }
  18. }

在上面的代码中,为了显得自然我们给进入按钮加入了一点动画 :]

最终效果如下:

效果展示

[iOS]简单的APP引导页的实现 (Swift)的更多相关文章

  1. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ②)

    距上一篇博客"APP引导页的高度集成 - DHGuidePageHUD - ①"的发布有一段时间了, 后来又在SDK中补充了一些新的内容进去但是一直没来得及跟大家分享, 今天来跟大 ...

  2. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ①)

    好长时间没更新博客, 是时候来一波干货分享了;APP引导页话不多说每一个APP都会用到,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了吧,当然这里讲的不是 ...

  3. 高仿京东到家APP引导页炫酷动画效果

    前言 京东到家APP的引导页做的可圈可点,插画+动效,简明生动地说明了APP最吸引用户的几个亮点(商品多,价格低,配送快...).本文主要分析拆解这些动画效果,并完成一个高仿Demo,完整的Demo代 ...

  4. GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD)

    每一个APP都会用到APP引导页,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了,当然这里讲的不是APP引导页的美化而是APP引导页的高度集成,一行代码搞 ...

  5. [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络)

    [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络) 地址: http://www.eoeandroid.com/thread-918356-1-1.html h ...

  6. [iOS] App引导页的简单实现 (Swift 2)

    转载请注明出处:http://www.jianshu.com/p/024dd2d6e6e6# 已更新至 Xcode7.2.Swift2.1 在第一次打开App或者App更新后通常用引导页来展示产品特性 ...

  7. iOS App引导页功能实现

    一.写作原因 以前都没有想着来写点东西,今天遇到件事情让我决定每次还是要做记录.因为以前自己可以轻松的完成pod spec的配置,但是今天在做的时候还是忘了遇到了很多坑.pod spec配置遇到的坑不 ...

  8. iOS最好用的引导页

    最近项目结束的时候又要改引导页,之前写的启动页改起来太麻烦了,所以就直接封装一个,功能可能还不是很完善,但是感觉用起来也比较方便,在这里和大家分享一下. 这是github的下载地址:https://g ...

  9. app引导页(背景图片切换加各个页面动画效果)

    前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...

随机推荐

  1. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  2. H5前端面试题及答案(2)

    最近想着跳槽,但面试的邀约不多,内心有点烦躁.梳理梳理心情,跳槽季竞争也大,努力做好自己... 21.请设计一套方案,用于确保页面中js加载完全. <!doctype html> < ...

  3. 基于visual Studio2013解决C语言竞赛题之1009补数

         题目 解决代码及点评 /************************************************************************/ ...

  4. Silk Icons —— 再来 700 个免费小图标

    http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NzM0MjcyMQ==&appmsgid=10000977&itemidx=2&am ...

  5. HNCU1330:算法3-1:八进制数

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1330 题目描述 将十进制数转换为八进制, ...

  6. servlet 与缓存(4)

    1.设置缓存的两种情况: 第一种:对于不常常变化的数据,在servlet中能够为其设置合理的缓存时间值,以避免浏览器频繁向server发送请求,提升server的性能. 另外一种:假设要实现一种高级功 ...

  7. Eclipse用法和技巧二十六:浅谈快捷键

    网络上到处都是eclipse有哪些常用的快捷键,其中还有很多讲得着实不错,这里就不再狗尾续貂而是谈谈别的这段时间的一些思考.最近加入了开发团队,代码量突突的上去了,同时也发现关于快捷键还是有很多细节, ...

  8. Mysql zip 安装(windows)

    Mysql Windows zip包安装 Mysql 下载地址: http://dev.mysql.com/downloads/mysql/ 下载windows 版本对应的zip,之后解压 在C:\P ...

  9. 终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理(显示透明会导致计算无效区域的方式有所不同——透明的话应减少剪裁区域,所以要进行仔细计算)

    在研究TCustomControl的显示过程中,怎么样都找不到刷新FWinControls并重新显示的代码: procedure TWinControl.PaintHandler(var Messag ...

  10. C语言指针和数组知识总结(上)

    C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...