GuidePageView.swift 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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) * 15 + 24
  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 = 3//当前点的宽度为其他点的3倍
  61. pageControl.localPointSpace = 15
  62. pageControl.currentColor = UIColor.black
  63. pageControl.otherColor = kEDEEF0Color
  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. self?.alpha = 0.0
  71. }) { [weak self] (_) in
  72. self?.removeFromSuperview()
  73. }
  74. }
  75. class func guidePageView(images:Array<String>?) {
  76. if UserDefaults.isFirstLaunchOfNewVersion() {
  77. let window = UIApplication.shared.windows.last
  78. let guidePageView = GuidePageView.init(frame:UIScreen.main.bounds,images: images)
  79. window?.addSubview(guidePageView)
  80. }
  81. }
  82. }
  83. extension GuidePageView :FSPagerViewDataSource,FSPagerViewDelegate {
  84. func numberOfItems(in pagerView: FSPagerView) -> Int {
  85. return images?.count ?? 0
  86. }
  87. func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
  88. let cell = GuidePageViewCell.cellWith(pagerView: pagerView, index: index)
  89. cell.images = images
  90. cell.startClosure = {
  91. [weak self] in
  92. self?.removeGuideViewFromSupview()
  93. }
  94. return cell
  95. }
  96. func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
  97. pagerView.deselectItem(at: index, animated: true)
  98. }
  99. func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
  100. self.pageControl.currentPage = targetIndex
  101. if targetIndex == (images?.count ?? 1) - 1 {
  102. self.pageControl.isHidden = true
  103. }else {
  104. self.pageControl.isHidden = false
  105. }
  106. }
  107. func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
  108. self.pageControl.currentPage = pagerView.currentIndex
  109. }
  110. }