JXSegmentedTitleGradientDataSource.swift 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //
  2. // JXSegmentedTitleGradientDataSource.swift
  3. // JXSegmentedView
  4. //
  5. // Created by jiaxin on 2019/1/23.
  6. // Copyright © 2019 jiaxin. All rights reserved.
  7. //
  8. import UIKit
  9. open class JXSegmentedTitleGradientDataSource: JXSegmentedTitleDataSource {
  10. /// title普通状态下的渐变colors
  11. open var titleNormalGradientColors: [CGColor] = [UIColor.black.cgColor, UIColor.black.cgColor, UIColor.black.cgColor]
  12. /// title选中状态下的渐变colors
  13. open var titleSelectedGradientColors: [CGColor] = [UIColor(red: 18/255.0, green: 194/255.0, blue: 233/255.0, alpha: 1).cgColor, UIColor(red: 196/255.0, green: 113/255.0, blue: 237/255.0, alpha: 1).cgColor, UIColor(red: 246/255.0, green: 79/255.0, blue: 89/255.0, alpha: 1).cgColor]
  14. /// title渐变的StartPoint
  15. open var titleGradientStartPoint: CGPoint = CGPoint(x: 0, y: 0)
  16. /// title渐变的EndPoint
  17. open var titleGradientEndPoint: CGPoint = CGPoint(x: 1, y: 0)
  18. open override func preferredItemModelInstance() -> JXSegmentedBaseItemModel {
  19. return JXSegmentedTitleGradientItemModel()
  20. }
  21. open override func preferredRefreshItemModel(_ itemModel: JXSegmentedBaseItemModel, at index: Int, selectedIndex: Int) {
  22. super.preferredRefreshItemModel(itemModel, at: index, selectedIndex: selectedIndex)
  23. guard let itemModel = itemModel as? JXSegmentedTitleGradientItemModel else {
  24. return
  25. }
  26. itemModel.titleGradientStartPoint = titleGradientStartPoint
  27. itemModel.titleGradientEndPoint = titleGradientEndPoint
  28. itemModel.titleNormalGradientColors = titleNormalGradientColors
  29. itemModel.titleSelectedGradientColors = titleSelectedGradientColors
  30. if index == selectedIndex {
  31. itemModel.titleCurrentGradientColors = itemModel.titleSelectedGradientColors
  32. }else {
  33. itemModel.titleCurrentGradientColors = itemModel.titleNormalGradientColors
  34. }
  35. }
  36. //MARK: - JXSegmentedViewDataSource
  37. open override func registerCellClass(in segmentedView: JXSegmentedView) {
  38. segmentedView.collectionView.register(JXSegmentedTitleGradientCell.self, forCellWithReuseIdentifier: "cell")
  39. }
  40. open override func segmentedView(_ segmentedView: JXSegmentedView, cellForItemAt index: Int) -> JXSegmentedBaseCell {
  41. let cell = segmentedView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
  42. return cell
  43. }
  44. open override func refreshItemModel(_ segmentedView: JXSegmentedView, leftItemModel: JXSegmentedBaseItemModel, rightItemModel: JXSegmentedBaseItemModel, percent: CGFloat) {
  45. super.refreshItemModel(segmentedView, leftItemModel: leftItemModel, rightItemModel: rightItemModel, percent: percent)
  46. guard let leftModel = leftItemModel as? JXSegmentedTitleGradientItemModel, let rightModel = rightItemModel as? JXSegmentedTitleGradientItemModel else {
  47. return
  48. }
  49. if isTitleColorGradientEnabled && isItemTransitionEnabled {
  50. leftModel.titleCurrentGradientColors = JXSegmentedViewTool.interpolateColors(from: leftModel.titleSelectedGradientColors, to: leftModel.titleNormalGradientColors, percent: percent)
  51. rightModel.titleCurrentGradientColors = JXSegmentedViewTool.interpolateColors(from: rightModel.titleNormalGradientColors, to: rightModel.titleSelectedGradientColors, percent: percent)
  52. }
  53. }
  54. open override func refreshItemModel(_ segmentedView: JXSegmentedView, currentSelectedItemModel: JXSegmentedBaseItemModel, willSelectedItemModel: JXSegmentedBaseItemModel, selectedType: JXSegmentedViewItemSelectedType) {
  55. super.refreshItemModel(segmentedView, currentSelectedItemModel: currentSelectedItemModel, willSelectedItemModel: willSelectedItemModel, selectedType: selectedType)
  56. guard let myCurrentSelectedItemModel = currentSelectedItemModel as? JXSegmentedTitleGradientItemModel, let myWillSelectedItemModel = willSelectedItemModel as? JXSegmentedTitleGradientItemModel else {
  57. return
  58. }
  59. myCurrentSelectedItemModel.titleCurrentGradientColors = myCurrentSelectedItemModel.titleNormalGradientColors
  60. myWillSelectedItemModel.titleCurrentGradientColors = myWillSelectedItemModel.titleSelectedGradientColors
  61. }
  62. }