From 83b9d5c682b21d88133f24da0f94dd56bd79e687 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 19 Jul 2018 13:38:55 +0800
Subject: [PATCH] change

---
 screendisplay/Pods/ZJScrollPageView/ZJScrollPageView/ZJScrollPageView/ZJScrollSegmentView.m |  734 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 734 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/ZJScrollPageView/ZJScrollPageView/ZJScrollPageView/ZJScrollSegmentView.m b/screendisplay/Pods/ZJScrollPageView/ZJScrollPageView/ZJScrollPageView/ZJScrollSegmentView.m
new file mode 100755
index 0000000..dc39d66
--- /dev/null
+++ b/screendisplay/Pods/ZJScrollPageView/ZJScrollPageView/ZJScrollPageView/ZJScrollSegmentView.m
@@ -0,0 +1,734 @@
+//
+//  ZJScrollSegmentView.m
+//  ZJScrollPageView
+//
+//  Created by jasnig on 16/5/6.
+//  Copyright �� 2016��� ZeroJ. All rights reserved.
+//
+
+#import "ZJScrollSegmentView.h"
+#import "ZJTitleView.h"
+#import "UIView+ZJFrame.h"
+
+@interface ZJScrollSegmentView ()<UIScrollViewDelegate> {
+    CGFloat _currentWidth;
+    NSUInteger _currentIndex;
+    NSUInteger _oldIndex;
+//    BOOL _isScroll;
+}
+// ���������
+@property (strong, nonatomic) UIView *scrollLine;
+// ������
+@property (strong, nonatomic) UIView *coverLayer;
+// ������scrollView
+@property (strong, nonatomic) UIScrollView *scrollView;
+// ������ImageView
+@property (strong, nonatomic) UIImageView *backgroundImageView;
+// ���������������
+@property (strong, nonatomic) UIButton *extraBtn;
+
+
+// ������������������������������rgb������, ���������������������������������
+@property (strong, nonatomic) NSArray *deltaRGB;
+@property (strong, nonatomic) NSArray *selectedColorRgb;
+@property (strong, nonatomic) NSArray *normalColorRgb;
+/** ������������������label */
+@property (nonatomic, strong) NSMutableArray *titleViews;
+// ������������������������������������������
+@property (nonatomic, strong) NSMutableArray *titleWidths;
+// ������������������
+@property (copy, nonatomic) TitleBtnOnClickBlock titleBtnOnClick;
+
+@end
+
+@implementation ZJScrollSegmentView
+
+static CGFloat const xGap = 5.0;
+static CGFloat const wGap = 2*xGap;
+static CGFloat const contentSizeXOff = 20.0;
+
+#pragma mark - life cycle
+- (instancetype)initWithFrame:(CGRect )frame segmentStyle:(ZJSegmentStyle *)segmentStyle delegate:(id<ZJScrollPageViewDelegate>)delegate titles:(NSArray *)titles titleDidClick:(TitleBtnOnClickBlock)titleDidClick {
+    if (self = [super initWithFrame:frame]) {
+        self.segmentStyle = segmentStyle;
+        self.titles = titles;
+        self.titleBtnOnClick = titleDidClick;
+        self.delegate = delegate;
+        _currentIndex = 0;
+        _oldIndex = 0;
+        _currentWidth = frame.size.width;
+        
+        if (!self.segmentStyle.isScrollTitle) { // ���������������������������������������������������������������������������, ������������������������
+            
+            self.segmentStyle.scaleTitle = !(self.segmentStyle.isShowCover || self.segmentStyle.isShowLine);
+        }
+        
+        if (self.segmentStyle.isShowImage) {//������������������������������
+            self.segmentStyle.scaleTitle = NO;
+            self.segmentStyle.showCover = NO;
+            self.segmentStyle.gradualChangeTitleColor = NO;
+        }
+        
+        // ���������frame������������������������������������������frame���, ������������layoutsubView()������������
+        [self setupSubviews];
+        [self setupUI];
+
+    }
+    
+    return self;
+}
+- (void)setupSubviews {
+    
+    [self addSubview:self.scrollView];
+    [self addScrollLineOrCoverOrExtraBtn];
+    [self setupTitles];
+}
+
+- (void)addScrollLineOrCoverOrExtraBtn {
+    if (self.segmentStyle.isShowLine) {
+        [self.scrollView addSubview:self.scrollLine];
+    }
+    
+    if (self.segmentStyle.isShowCover) {
+        [self.scrollView insertSubview:self.coverLayer atIndex:0];
+        
+    }
+    
+    if (self.segmentStyle.isShowExtraButton) {
+        [self addSubview:self.extraBtn];
+    }
+}
+
+- (void)dealloc
+{
+#if DEBUG
+    NSLog(@"ZJScrollSegmentView ---- ������");
+    
+#endif
+}
+
+#pragma mark - button action
+
+- (void)titleLabelOnClick:(UITapGestureRecognizer *)tapGes {
+    
+    ZJTitleView *currentLabel = (ZJTitleView *)tapGes.view;
+    
+    if (!currentLabel) {
+        return;
+    }
+    
+    _currentIndex = currentLabel.tag;
+    
+    [self adjustUIWhenBtnOnClickWithAnimate:true];
+}
+
+- (void)extraBtnOnClick:(UIButton *)extraBtn {
+    
+    if (self.extraBtnOnClick) {
+        self.extraBtnOnClick(extraBtn);
+    }
+}
+
+
+#pragma mark - private helper
+
+- (void)setupTitles {
+    
+    if (self.titles.count == 0) return;
+    
+    NSInteger index = 0;
+    for (NSString *title in self.titles) {
+        
+        ZJTitleView *titleView = [[ZJTitleView alloc] initWithFrame:CGRectZero];
+        titleView.tag = index;
+        
+        titleView.font = self.segmentStyle.titleFont;
+        titleView.text = title;
+        titleView.textColor = self.segmentStyle.normalTitleColor;
+        titleView.imagePosition = self.segmentStyle.imagePosition;
+
+        
+        if (self.delegate && [self.delegate respondsToSelector:@selector(setUpTitleView:forIndex:)]) {
+            [self.delegate setUpTitleView:titleView forIndex:index];
+        }
+        
+        UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(titleLabelOnClick:)];
+        [titleView addGestureRecognizer:tapGes];
+        
+        CGFloat titleViewWidth = [titleView titleViewWidth];
+        [self.titleWidths addObject:@(titleViewWidth)];
+        
+        [self.titleViews addObject:titleView];
+        [self.scrollView addSubview:titleView];
+        
+        index++;
+        
+    }
+    
+}
+
+- (void)setupUI {
+    if (self.titles.count == 0) return;
+
+    [self setupScrollViewAndExtraBtn];
+    [self setUpTitleViewsPosition];
+    [self setupScrollLineAndCover];
+    
+    if (self.segmentStyle.isScrollTitle) { // ������������������
+        ZJTitleView *lastTitleView = (ZJTitleView *)self.titleViews.lastObject;
+        
+        if (lastTitleView) {
+            self.scrollView.contentSize = CGSizeMake(CGRectGetMaxX(lastTitleView.frame) + contentSizeXOff, 0.0);
+        }
+    }
+    
+}
+
+- (void)setupScrollViewAndExtraBtn {
+    CGFloat extraBtnW = 44.0;
+    CGFloat extraBtnY = 5.0;
+    
+    //    UILabel *lastLabel = _titleLabels.lastObject;
+    //    CGFloat maxX = CGRectGetMaxX(lastLabel.frame) + 8;
+    CGFloat scrollW = self.extraBtn ? _currentWidth - extraBtnW : _currentWidth;
+    //    if (maxX < _currentWidth) {
+    //        scrollW = maxX;
+    //    }
+    self.scrollView.frame = CGRectMake(0.0, 0.0, scrollW, self.zj_height);
+    
+    if (self.extraBtn) {
+        self.extraBtn.frame = CGRectMake(scrollW , extraBtnY, extraBtnW, self.zj_height - 2*extraBtnY);
+    }
+}
+
+- (void)setUpTitleViewsPosition {
+    CGFloat titleX = 0.0;
+    CGFloat titleY = 0.0;
+    CGFloat titleW = 0.0;
+    CGFloat titleH = self.zj_height - self.segmentStyle.scrollLineHeight;
+    
+    if (!self.segmentStyle.isScrollTitle) {// ������������������, ������������
+        titleW = _currentWidth / self.titles.count;
+        
+        NSInteger index = 0;
+        for (ZJTitleView *titleView in self.titleViews) {
+            
+            titleX = index * titleW;
+            
+            titleView.frame = CGRectMake(titleX, titleY, titleW, titleH);
+            if (self.segmentStyle.isShowImage) {
+                [titleView adjustSubviewFrame];
+            }
+            index++;
+        }
+        
+    } else {
+        NSInteger index = 0;
+        float lastLableMaxX = self.segmentStyle.titleMargin;
+        float addedMargin = 0.0f;
+        if (self.segmentStyle.isAutoAdjustTitlesWidth) {
+            
+            float allTitlesWidth = self.segmentStyle.titleMargin;
+            for (int i = 0; i<self.titleWidths.count; i++) {
+                allTitlesWidth = allTitlesWidth + [self.titleWidths[i] floatValue] + self.segmentStyle.titleMargin;
+            }
+            
+            
+            addedMargin = allTitlesWidth < self.scrollView.bounds.size.width ? (self.scrollView.bounds.size.width - allTitlesWidth)/self.titleWidths.count : 0 ;
+        }
+
+        for (ZJTitleView *titleView in self.titleViews) {
+            titleW = [self.titleWidths[index] floatValue];
+            titleX = lastLableMaxX + addedMargin/2;
+
+            lastLableMaxX += (titleW + addedMargin + self.segmentStyle.titleMargin);
+
+            titleView.frame = CGRectMake(titleX, titleY, titleW, titleH);
+            if (self.segmentStyle.isShowImage) {
+                [titleView adjustSubviewFrame];
+            }
+            index++;
+            
+        }
+        
+    }
+    
+    ZJTitleView *currentTitleView = (ZJTitleView *)self.titleViews[_currentIndex];
+    currentTitleView.currentTransformSx = 1.0;
+    if (currentTitleView) {
+        
+        // ������, ���������������label���transform
+        if (self.segmentStyle.isScaleTitle) {
+            currentTitleView.currentTransformSx = self.segmentStyle.titleBigScale;
+        }
+        // ���������������������������������
+        currentTitleView.textColor = self.segmentStyle.selectedTitleColor;
+        if (self.segmentStyle.isShowImage) {
+            currentTitleView.selected = YES;
+        }
+    }
+    
+}
+
+- (void)setupScrollLineAndCover {
+    
+    ZJTitleView *firstLabel = (ZJTitleView *)self.titleViews[0];
+    CGFloat coverX = firstLabel.zj_x;
+    CGFloat coverW = firstLabel.zj_width;
+    CGFloat coverH = self.segmentStyle.coverHeight;
+    CGFloat coverY = (self.bounds.size.height - coverH) * 0.5;
+    
+    if (self.scrollLine) {
+        
+        if (self.segmentStyle.isScrollTitle) {
+            self.scrollLine.frame = CGRectMake(coverX , self.zj_height - self.segmentStyle.scrollLineHeight, coverW , self.segmentStyle.scrollLineHeight);
+
+        } else {
+            if (self.segmentStyle.isAdjustCoverOrLineWidth) {
+                coverW = [self.titleWidths[_currentIndex] floatValue] + wGap;
+                coverX = (firstLabel.zj_width - coverW) * 0.5;
+            }
+
+            self.scrollLine.frame = CGRectMake(coverX , self.zj_height - self.segmentStyle.scrollLineHeight, coverW , self.segmentStyle.scrollLineHeight);
+
+        }
+        
+        
+    }
+    
+    if (self.coverLayer) {
+        
+        if (self.segmentStyle.isScrollTitle) {
+            self.coverLayer.frame = CGRectMake(coverX - xGap, coverY, coverW + wGap, coverH);
+            
+        } else {
+            if (self.segmentStyle.isAdjustCoverOrLineWidth) {
+                coverW = [self.titleWidths[_currentIndex] floatValue] + wGap;
+                coverX = (firstLabel.zj_width - coverW) * 0.5;
+            }
+
+            self.coverLayer.frame = CGRectMake(coverX, coverY, coverW, coverH);
+            
+        }
+        
+        
+    }
+        
+}
+
+
+#pragma mark - public helper
+
+- (void)adjustUIWhenBtnOnClickWithAnimate:(BOOL)animated {
+    if (_currentIndex == _oldIndex) { return; }
+    
+    ZJTitleView *oldTitleView = (ZJTitleView *)self.titleViews[_oldIndex];
+    ZJTitleView *currentTitleView = (ZJTitleView *)self.titleViews[_currentIndex];
+    
+    CGFloat animatedTime = animated ? 0.30 : 0.0;
+    
+    __weak typeof(self) weakSelf = self;
+    
+    [UIView animateWithDuration:animatedTime animations:^{
+        oldTitleView.textColor = weakSelf.segmentStyle.normalTitleColor;
+        currentTitleView.textColor = weakSelf.segmentStyle.selectedTitleColor;
+        oldTitleView.selected = NO;
+        currentTitleView.selected = YES;
+        if (weakSelf.segmentStyle.isScaleTitle) {
+            oldTitleView.currentTransformSx = 1.0;
+            currentTitleView.currentTransformSx = weakSelf.segmentStyle.titleBigScale;
+        }
+        
+        if (weakSelf.scrollLine) {
+            if (weakSelf.segmentStyle.isScrollTitle) {
+                weakSelf.scrollLine.zj_x = currentTitleView.zj_x;
+                weakSelf.scrollLine.zj_width = currentTitleView.zj_width;
+            } else {
+                if (self.segmentStyle.isAdjustCoverOrLineWidth) {
+                    CGFloat scrollLineW = [self.titleWidths[_currentIndex] floatValue] + wGap;
+                    CGFloat scrollLineX = currentTitleView.zj_x + (currentTitleView.zj_width - scrollLineW) * 0.5;
+                    weakSelf.scrollLine.zj_x = scrollLineX;
+                    weakSelf.scrollLine.zj_width = scrollLineW;
+                } else {
+                    weakSelf.scrollLine.zj_x = currentTitleView.zj_x;
+                    weakSelf.scrollLine.zj_width = currentTitleView.zj_width;
+                }
+                
+            }
+            
+        }
+        
+        if (weakSelf.coverLayer) {
+            if (weakSelf.segmentStyle.isScrollTitle) {
+                
+                weakSelf.coverLayer.zj_x = currentTitleView.zj_x - xGap;
+                weakSelf.coverLayer.zj_width = currentTitleView.zj_width + wGap;
+            } else {
+                if (self.segmentStyle.isAdjustCoverOrLineWidth) {
+                    CGFloat coverW = [self.titleWidths[_currentIndex] floatValue] + wGap;
+                    CGFloat coverX = currentTitleView.zj_x + (currentTitleView.zj_width - coverW) * 0.5;
+                    weakSelf.coverLayer.zj_x = coverX;
+                    weakSelf.coverLayer.zj_width = coverW;
+                } else {
+                    weakSelf.coverLayer.zj_x = currentTitleView.zj_x;
+                    weakSelf.coverLayer.zj_width = currentTitleView.zj_width;
+                }
+            }
+            
+        }
+
+    } completion:^(BOOL finished) {
+        [weakSelf adjustTitleOffSetToCurrentIndex:_currentIndex];
+
+    }];
+    
+    _oldIndex = _currentIndex;
+    if (self.titleBtnOnClick) {
+        self.titleBtnOnClick(currentTitleView, _currentIndex);
+    }
+}
+
+- (void)adjustUIWithProgress:(CGFloat)progress oldIndex:(NSInteger)oldIndex currentIndex:(NSInteger)currentIndex {
+    if (oldIndex < 0 ||
+        oldIndex >= self.titles.count ||
+        currentIndex < 0 ||
+        currentIndex >= self.titles.count
+        ) {
+        return;
+    }
+    _oldIndex = currentIndex;
+    
+    ZJTitleView *oldTitleView = (ZJTitleView *)self.titleViews[oldIndex];
+    ZJTitleView *currentTitleView = (ZJTitleView *)self.titleViews[currentIndex];
+
+    
+    CGFloat xDistance = currentTitleView.zj_x - oldTitleView.zj_x;
+    CGFloat wDistance = currentTitleView.zj_width - oldTitleView.zj_width;
+    
+    if (self.scrollLine) {
+        
+        if (self.segmentStyle.isScrollTitle) {
+            self.scrollLine.zj_x = oldTitleView.zj_x + xDistance * progress;
+            self.scrollLine.zj_width = oldTitleView.zj_width + wDistance * progress;
+        } else {
+            if (self.segmentStyle.isAdjustCoverOrLineWidth) {
+                CGFloat oldScrollLineW = [self.titleWidths[oldIndex] floatValue] + wGap;
+                CGFloat currentScrollLineW = [self.titleWidths[currentIndex] floatValue] + wGap;
+                wDistance = currentScrollLineW - oldScrollLineW;
+                
+                CGFloat oldScrollLineX = oldTitleView.zj_x + (oldTitleView.zj_width - oldScrollLineW) * 0.5;
+                CGFloat currentScrollLineX = currentTitleView.zj_x + (currentTitleView.zj_width - currentScrollLineW) * 0.5;
+                xDistance = currentScrollLineX - oldScrollLineX;
+                self.scrollLine.zj_x = oldScrollLineX + xDistance * progress;
+                self.scrollLine.zj_width = oldScrollLineW + wDistance * progress;
+            } else {
+                self.scrollLine.zj_x = oldTitleView.zj_x + xDistance * progress;
+                self.scrollLine.zj_width = oldTitleView.zj_width + wDistance * progress;
+            }
+        }
+
+    }
+    
+    if (self.coverLayer) {
+        if (self.segmentStyle.isScrollTitle) {
+            self.coverLayer.zj_x = oldTitleView.zj_x + xDistance * progress - xGap;
+            self.coverLayer.zj_width = oldTitleView.zj_width + wDistance * progress + wGap;
+        } else {
+            if (self.segmentStyle.isAdjustCoverOrLineWidth) {
+                CGFloat oldCoverW = [self.titleWidths[oldIndex] floatValue] + wGap;
+                CGFloat currentCoverW = [self.titleWidths[currentIndex] floatValue] + wGap;
+                wDistance = currentCoverW - oldCoverW;
+                CGFloat oldCoverX = oldTitleView.zj_x + (oldTitleView.zj_width - oldCoverW) * 0.5;
+                CGFloat currentCoverX = currentTitleView.zj_x + (currentTitleView.zj_width - currentCoverW) * 0.5;
+                xDistance = currentCoverX - oldCoverX;
+                self.coverLayer.zj_x = oldCoverX + xDistance * progress;
+                self.coverLayer.zj_width = oldCoverW + wDistance * progress;
+            } else {
+                self.coverLayer.zj_x = oldTitleView.zj_x + xDistance * progress;
+                self.coverLayer.zj_width = oldTitleView.zj_width + wDistance * progress;
+            }
+        }
+    }
+    
+    // ������
+    if (self.segmentStyle.isGradualChangeTitleColor) {
+
+        oldTitleView.textColor = [UIColor colorWithRed:[self.selectedColorRgb[0] floatValue] + [self.deltaRGB[0] floatValue] * progress green:[self.selectedColorRgb[1] floatValue] + [self.deltaRGB[1] floatValue] * progress blue:[self.selectedColorRgb[2] floatValue] + [self.deltaRGB[2] floatValue] * progress alpha:1.0];
+        currentTitleView.textColor = [UIColor colorWithRed:[self.normalColorRgb[0] floatValue] - [self.deltaRGB[0] floatValue] * progress green:[self.normalColorRgb[1] floatValue] - [self.deltaRGB[1] floatValue] * progress blue:[self.normalColorRgb[2] floatValue] - [self.deltaRGB[2] floatValue] * progress alpha:1.0];
+        
+    }
+    
+    if (!self.segmentStyle.isScaleTitle) {
+        return;
+    }
+    
+    CGFloat deltaScale = self.segmentStyle.titleBigScale - 1.0;
+    oldTitleView.currentTransformSx = self.segmentStyle.titleBigScale - deltaScale * progress;
+    currentTitleView.currentTransformSx = 1.0 + deltaScale * progress;
+    
+    
+}
+
+- (void)adjustTitleOffSetToCurrentIndex:(NSInteger)currentIndex {
+    // ������������������item������������������
+
+    for (NSInteger index = currentIndex - 3; index < currentIndex + 3; index++) {
+        if (index >= 0 && index <= _titles.count - 1) {
+            ZJTitleView *nextTitleView = _titleViews[index];
+            if (index != currentIndex) {
+                nextTitleView.textColor = self.segmentStyle.normalTitleColor;
+                nextTitleView.currentTransformSx = 1.0;
+                nextTitleView.selected = NO;
+            }
+            else {
+                nextTitleView.textColor = self.segmentStyle.selectedTitleColor;
+                if (self.segmentStyle.isScaleTitle) {
+                    nextTitleView.currentTransformSx = self.segmentStyle.titleBigScale;
+                }
+                nextTitleView.selected = YES;
+            }
+
+        }
+    }
+  
+
+    if (self.scrollView.contentSize.width != self.scrollView.bounds.size.width + contentSizeXOff) {// ������������
+        ZJTitleView *currentTitleView = (ZJTitleView *)_titleViews[currentIndex];
+        self.userInteractionEnabled = NO;
+
+        CGFloat offSetx = currentTitleView.center.x - _currentWidth * 0.5;
+        if (offSetx < 0) {
+            offSetx = 0;
+            self.userInteractionEnabled = YES;
+
+        }
+        CGFloat extraBtnW = self.extraBtn ? self.extraBtn.zj_width : 0.0;
+        CGFloat maxOffSetX = self.scrollView.contentSize.width - (_currentWidth - extraBtnW);
+        
+        if (maxOffSetX < 0) {
+            maxOffSetX = 0;
+        }
+        
+        if (offSetx > maxOffSetX) {
+            offSetx = maxOffSetX;
+            self.userInteractionEnabled = YES;
+        }
+        
+        if (!self.segmentStyle.isGradualChangeTitleColor) {
+            int index = 0;
+            for (ZJTitleView *titleView in _titleViews) {
+                if (index != currentIndex) {
+                    titleView.textColor = self.segmentStyle.normalTitleColor;
+                    titleView.currentTransformSx = 1.0;
+                    titleView.selected = NO;
+                }
+                else {
+                    titleView.textColor = self.segmentStyle.selectedTitleColor;
+                    if (self.segmentStyle.isScaleTitle) {
+                        titleView.currentTransformSx = self.segmentStyle.titleBigScale;
+                    }
+                    titleView.selected = YES;
+ 
+                }
+                
+                index++;
+            }
+        }
+        [self.scrollView setContentOffset:CGPointMake(offSetx, 0.0) animated:YES];
+    }
+
+ 
+}
+
+- (void)setSelectedIndex:(NSInteger)index animated:(BOOL)animated {
+    NSAssert(index >= 0 && index < self.titles.count, @"������������������������!!");
+
+    if (index < 0 || index >= self.titles.count) {
+        return;
+    }
+    
+    _currentIndex = index;
+    [self adjustUIWhenBtnOnClickWithAnimate:animated];
+}
+
+- (void)reloadTitlesWithNewTitles:(NSArray *)titles {
+    [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
+    
+    self.titleWidths = nil;
+    self.titleViews = nil;
+    self.titles = nil;
+    self.titles = [titles copy];
+    if (self.titles.count == 0) return;
+    for (UIView *subview in self.subviews) {
+        [subview removeFromSuperview];
+    }
+    [self setupSubviews];
+    [self setupUI];
+    [self setSelectedIndex:0 animated:YES];
+    
+}
+
+- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
+    self.userInteractionEnabled = YES;
+}
+
+#pragma mark - getter --- setter
+
+- (UIView *)scrollLine {
+    
+    if (!self.segmentStyle.isShowLine) {
+        return nil;
+    }
+    
+    if (!_scrollLine) {
+        UIView *lineView = [[UIView alloc] init];
+        lineView.backgroundColor = self.segmentStyle.scrollLineColor;
+
+        _scrollLine = lineView;
+        
+    }
+    
+    return _scrollLine;
+}
+
+- (UIView *)coverLayer {
+    if (!self.segmentStyle.isShowCover) {
+        return nil;
+    }
+    
+    if (_coverLayer == nil) {
+        UIView *coverView = [[UIView alloc] init];
+        coverView.backgroundColor = self.segmentStyle.coverBackgroundColor;
+        coverView.layer.cornerRadius = self.segmentStyle.coverCornerRadius;
+        coverView.layer.masksToBounds = YES;
+
+        _coverLayer = coverView;
+        
+    }
+    
+    return _coverLayer;
+}
+
+- (UIButton *)extraBtn {
+    
+    if (!self.segmentStyle.showExtraButton) {
+        return nil;
+    }
+    if (!_extraBtn) {
+        UIButton *btn = [UIButton new];
+        [btn addTarget:self action:@selector(extraBtnOnClick:) forControlEvents:UIControlEventTouchUpInside];
+        NSString *imageName = self.segmentStyle.extraBtnBackgroundImageName ? self.segmentStyle.extraBtnBackgroundImageName : @"";
+        [btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
+        btn.backgroundColor = [UIColor whiteColor];
+        // ���������������������������
+        btn.layer.shadowColor = [UIColor whiteColor].CGColor;
+        btn.layer.shadowOffset = CGSizeMake(-5, 0);
+        btn.layer.shadowOpacity = 1;
+        
+        _extraBtn = btn;
+    }
+    return _extraBtn;
+}
+
+- (UIScrollView *)scrollView {
+    
+    if (!_scrollView) {
+        UIScrollView *scrollView = [[UIScrollView alloc] init];
+        scrollView.showsHorizontalScrollIndicator = NO;
+        scrollView.scrollsToTop = NO;
+        scrollView.bounces = self.segmentStyle.isSegmentViewBounces;
+        scrollView.pagingEnabled = NO;
+        scrollView.delegate = self;
+        _scrollView = scrollView;
+    }
+    return _scrollView;
+}
+
+- (UIImageView *)backgroundImageView {
+    
+    if (!_backgroundImageView) {
+        UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds];
+        
+        [self insertSubview:imageView atIndex:0];
+
+        _backgroundImageView = imageView;
+    }
+    return _backgroundImageView;
+}
+
+- (void)setBackgroundImage:(UIImage *)backgroundImage {
+    _backgroundImage = backgroundImage;
+    if (backgroundImage) {
+        self.backgroundImageView.image = backgroundImage;
+    }
+}
+
+- (NSMutableArray *)titleViews
+{
+    if (_titleViews == nil) {
+        _titleViews = [NSMutableArray array];
+    }
+    return _titleViews;
+}
+
+- (NSMutableArray *)titleWidths
+{
+    if (_titleWidths == nil) {
+        _titleWidths = [NSMutableArray array];
+    }
+    return _titleWidths;
+}
+
+- (NSArray *)deltaRGB {
+    if (_deltaRGB == nil) {
+        NSArray *normalColorRgb = self.normalColorRgb;
+        NSArray *selectedColorRgb = self.selectedColorRgb;
+        
+        NSArray *delta;
+        if (normalColorRgb && selectedColorRgb) {
+            CGFloat deltaR = [normalColorRgb[0] floatValue] - [selectedColorRgb[0] floatValue];
+            CGFloat deltaG = [normalColorRgb[1] floatValue] - [selectedColorRgb[1] floatValue];
+            CGFloat deltaB = [normalColorRgb[2] floatValue] - [selectedColorRgb[2] floatValue];
+            delta = [NSArray arrayWithObjects:@(deltaR), @(deltaG), @(deltaB), nil];
+            _deltaRGB = delta;
+
+        }
+    }
+    return _deltaRGB;
+}
+
+- (NSArray *)normalColorRgb {
+    if (!_normalColorRgb) {
+        NSArray *normalColorRgb = [self getColorRgb:self.segmentStyle.normalTitleColor];
+        NSAssert(normalColorRgb, @"������������������������������������ ���������RGB������������������");
+        _normalColorRgb = normalColorRgb;
+        
+    }
+    return  _normalColorRgb;
+}
+
+- (NSArray *)selectedColorRgb {
+    if (!_selectedColorRgb) {
+        NSArray *selectedColorRgb = [self getColorRgb:self.segmentStyle.selectedTitleColor];
+        NSAssert(selectedColorRgb, @"������������������������������������ ���������RGB������������������");
+        _selectedColorRgb = selectedColorRgb;
+        
+    }
+    return  _selectedColorRgb;
+}
+
+- (NSArray *)getColorRgb:(UIColor *)color {
+    CGFloat numOfcomponents = CGColorGetNumberOfComponents(color.CGColor);
+    NSArray *rgbComponents;
+    if (numOfcomponents == 4) {
+        const CGFloat *components = CGColorGetComponents(color.CGColor);
+        rgbComponents = [NSArray arrayWithObjects:@(components[0]), @(components[1]), @(components[2]), nil];
+    }
+    return rgbComponents;
+    
+}
+
+
+@end
+
+

--
Gitblit v1.8.0