GuidePageView.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //
  2. // GuidePageView.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/8/14.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import FSPagerView
  10. class GuidePageView: UIView {
  11. deinit {
  12. NXLLog("deinit")
  13. }
  14. /// 图片数组
  15. private var images : Array<String>?
  16. override init(frame: CGRect) {
  17. super.init(frame: frame)
  18. }
  19. required init?(coder aDecoder: NSCoder) {
  20. fatalError("init(coder:) has not been implemented")
  21. }
  22. init(frame:CGRect,images:Array<String>?) {
  23. self.init()
  24. self.images = images
  25. self.frame = frame
  26. setupViews()
  27. setupLayouts()
  28. }
  29. func setupViews() {
  30. addSubview(pagerView)
  31. addSubview(pageControl)
  32. }
  33. func setupLayouts() {
  34. pagerView.snp.makeConstraints { (make) in
  35. make.edges.equalToSuperview()
  36. }
  37. let pageControlWidth = CGFloat((self.images?.count)! - 1) * 8 + CGFloat((self.images?.count)! - 1) * 10 + 8
  38. pageControl.snp.makeConstraints { (make) in
  39. make.centerX.equalToSuperview()
  40. make.bottom.equalTo(-50)
  41. make.height.equalTo(8)
  42. make.width.equalTo(pageControlWidth)
  43. }
  44. }
  45. private lazy var pagerView: FSPagerView = {
  46. let pagerView = FSPagerView(frame: CGRect.zero)
  47. pagerView.backgroundColor = kf7f8faColor
  48. pagerView.delegate = self
  49. pagerView.dataSource = self
  50. pagerView.scrollDirection = .horizontal
  51. pagerView.bounces = false
  52. pagerView.isInfinite = false
  53. pagerView.automaticSlidingInterval = 0
  54. return pagerView
  55. }()
  56. private lazy var pageControl: NXLPageControl = {
  57. let pageControl = NXLPageControl()
  58. pageControl.numberOfPages = self.images?.count ?? 0
  59. pageControl.pointSize = CGSize.init(width: 8, height: 8)
  60. pageControl.currentWidthMultiple = 1//当前点的宽度为其他点的3倍
  61. pageControl.localPointSpace = 10
  62. pageControl.currentColor = kffffffColor
  63. pageControl.otherColor = kffffffColor.withAlphaComponent(0.3)
  64. pageControl.clickPoint { _ in }
  65. return pageControl
  66. }()
  67. //MARK: - 移除所有的View
  68. private func removeGuideViewFromSupview() {
  69. UIView.animate(withDuration: 1.0, delay: 0, options: UIView.AnimationOptions.curveEaseOut, animations: { [weak self] in
  70. // WRNavigationBar.defaultStatusBarStyle = .default
  71. self?.alpha = 0.0
  72. let transform = CATransform3DScale(CATransform3DIdentity, 1.5, 1.5, 1.0)
  73. self?.layer.transform = transform
  74. }) { [weak self] (_) in
  75. self?.removeFromSuperview()
  76. }
  77. }
  78. class func guidePageView(images:Array<String>?) {
  79. if UserDefaults.isFirstLaunchOfNewVersion() {
  80. let window = UIApplication.shared.windows.last
  81. let guidePageView = GuidePageView.init(frame:UIScreen.main.bounds,images: images)
  82. window?.addSubview(guidePageView)
  83. }else {
  84. // 启动页
  85. kAppDelegate.setStartupPageView()
  86. }
  87. }
  88. }
  89. extension GuidePageView :FSPagerViewDataSource,FSPagerViewDelegate {
  90. func numberOfItems(in pagerView: FSPagerView) -> Int {
  91. return images?.count ?? 0
  92. }
  93. func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
  94. let cell = GuidePageViewCell.cellWith(pagerView: pagerView, index: index)
  95. cell.images = images
  96. cell.startClosure = {
  97. [weak self] in
  98. self?.removeGuideViewFromSupview()
  99. }
  100. return cell
  101. }
  102. func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
  103. pagerView.deselectItem(at: index, animated: true)
  104. }
  105. func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
  106. self.pageControl.currentPage = targetIndex
  107. if targetIndex == (images?.count ?? 1) - 1 {
  108. self.pageControl.isHidden = true
  109. }else {
  110. self.pageControl.isHidden = false
  111. }
  112. }
  113. func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
  114. self.pageControl.currentPage = pagerView.currentIndex
  115. }
  116. }