123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- //
- // JXSegmentedIndicatorGradientLineView.swift
- // JXSegmentedView
- //
- // Created by jiaxin on 2020/7/6.
- // Copyright © 2020 jiaxin. All rights reserved.
- //
- import UIKit
- /// 会无视indicatorColor属性,以gradientColors为准
- open class JXSegmentedIndicatorGradientLineView: JXSegmentedIndicatorLineView {
- open var colors = [UIColor]()
- open var startPoint = CGPoint.zero
- open var endPoint = CGPoint(x: 1, y: 0)
- open var locations: [NSNumber]?
- public let gradientLayer = CAGradientLayer()
- open override func commonInit() {
- super.commonInit()
- layer.masksToBounds = true
- layer.addSublayer(gradientLayer)
- }
- open override func refreshIndicatorState(model: JXSegmentedIndicatorSelectedParams) {
- super.refreshIndicatorState(model: model)
- backgroundColor = .clear
- CATransaction.begin()
- CATransaction.setDisableActions(true)
- gradientLayer.frame = bounds
- gradientLayer.colors = colors.map { $0.cgColor }
- gradientLayer.startPoint = startPoint
- gradientLayer.endPoint = endPoint
- gradientLayer.locations = locations
- CATransaction.commit()
- }
- open override func contentScrollViewDidScroll(model: JXSegmentedIndicatorTransitionParams) {
- super.contentScrollViewDidScroll(model: model)
- guard canHandleTransition(model: model) else {
- return
- }
- CATransaction.begin()
- CATransaction.setDisableActions(true)
- gradientLayer.frame = bounds
- CATransaction.commit()
- }
- open override func selectItem(model: JXSegmentedIndicatorSelectedParams) {
- super.selectItem(model: model)
- let targetWidth = getIndicatorWidth(itemFrame: model.currentSelectedItemFrame, itemContentWidth: model.currentItemContentWidth)
- CATransaction.begin()
- CATransaction.setAnimationDuration(scrollAnimationDuration)
- CATransaction.setAnimationTimingFunction(.init(name: .easeOut))
- gradientLayer.frame.size.width = targetWidth
- CATransaction.commit()
- }
- }
|