JXSegmentedDotDataSource.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //
  2. // JXSegmentedDotDataSource.swift
  3. // JXSegmentedView
  4. //
  5. // Created by jiaxin on 2018/12/28.
  6. // Copyright © 2018 jiaxin. All rights reserved.
  7. //
  8. import UIKit
  9. open class JXSegmentedDotDataSource: JXSegmentedTitleDataSource {
  10. /// 数量需要和titles一致,控制红点是否显示
  11. open var dotStates = [Bool]()
  12. /// 红点的size
  13. open var dotSize = CGSize(width: 10, height: 10)
  14. /// 红点的圆角值,JXSegmentedViewAutomaticDimension等于dotSize.height/2
  15. open var dotCornerRadius: CGFloat = JXSegmentedViewAutomaticDimension
  16. /// 红点的颜色
  17. open var dotColor = UIColor.red
  18. /// dotView的默认位置是center在titleLabel的右上角,可以通过dotOffset控制X、Y轴的偏移
  19. open var dotOffset: CGPoint = CGPoint.zero
  20. open override func preferredItemModelInstance() -> JXSegmentedBaseItemModel {
  21. return JXSegmentedDotItemModel()
  22. }
  23. open override func preferredRefreshItemModel(_ itemModel: JXSegmentedBaseItemModel, at index: Int, selectedIndex: Int) {
  24. super.preferredRefreshItemModel(itemModel, at: index, selectedIndex: selectedIndex)
  25. guard let itemModel = itemModel as? JXSegmentedDotItemModel else {
  26. return
  27. }
  28. itemModel.dotOffset = dotOffset
  29. itemModel.dotState = dotStates[index]
  30. itemModel.dotColor = dotColor
  31. itemModel.dotSize = dotSize
  32. if dotCornerRadius == JXSegmentedViewAutomaticDimension {
  33. itemModel.dotCornerRadius = dotSize.height/2
  34. }else {
  35. itemModel.dotCornerRadius = dotCornerRadius
  36. }
  37. }
  38. //MARK: - JXSegmentedViewDataSource
  39. open override func registerCellClass(in segmentedView: JXSegmentedView) {
  40. segmentedView.collectionView.register(JXSegmentedDotCell.self, forCellWithReuseIdentifier: "cell")
  41. }
  42. open override func segmentedView(_ segmentedView: JXSegmentedView, cellForItemAt index: Int) -> JXSegmentedBaseCell {
  43. let cell = segmentedView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
  44. return cell
  45. }
  46. }