From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化

---
 screendisplay/Pods/SDCycleScrollView/SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.m |  364 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 364 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/SDCycleScrollView/SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.m b/screendisplay/Pods/SDCycleScrollView/SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.m
new file mode 100755
index 0000000..4475517
--- /dev/null
+++ b/screendisplay/Pods/SDCycleScrollView/SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.m
@@ -0,0 +1,364 @@
+//
+//  TAPageControl.m
+//  TAPageControl
+//
+//  Created by Tanguy Aladenise on 2015-01-21.
+//  Copyright (c) 2015 Tanguy Aladenise. All rights reserved.
+//
+
+#import "TAPageControl.h"
+#import "TAAbstractDotView.h"
+#import "TAAnimatedDotView.h"
+#import "TADotView.h"
+
+/**
+ *  Default number of pages for initialization
+ */
+static NSInteger const kDefaultNumberOfPages = 0;
+
+/**
+ *  Default current page for initialization
+ */
+static NSInteger const kDefaultCurrentPage = 0;
+
+/**
+ *  Default setting for hide for single page feature. For initialization
+ */
+static BOOL const kDefaultHideForSinglePage = NO;
+
+/**
+ *  Default setting for shouldResizeFromCenter. For initialiation
+ */
+static BOOL const kDefaultShouldResizeFromCenter = YES;
+
+/**
+ *  Default spacing between dots
+ */
+static NSInteger const kDefaultSpacingBetweenDots = 8;
+
+/**
+ *  Default dot size
+ */
+static CGSize const kDefaultDotSize = {8, 8};
+
+
+@interface TAPageControl()
+
+
+/**
+ *  Array of dot views for reusability and touch events.
+ */
+@property (strong, nonatomic) NSMutableArray *dots;
+
+
+@end
+
+@implementation TAPageControl
+
+
+#pragma mark - Lifecycle
+
+
+- (id)init
+{
+    self = [super init];
+    if (self) {
+        [self initialization];
+    }
+    
+    return self;
+}
+
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self initialization];
+    }
+    return self;
+}
+
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super initWithCoder:aDecoder];
+    if (self) {
+        [self initialization];
+    }
+    
+    return self;
+}
+
+
+/**
+ *  Default setup when initiating control
+ */
+- (void)initialization
+{
+    self.dotViewClass           = [TAAnimatedDotView class];
+    self.spacingBetweenDots     = kDefaultSpacingBetweenDots;
+    self.numberOfPages          = kDefaultNumberOfPages;
+    self.currentPage            = kDefaultCurrentPage;
+    self.hidesForSinglePage     = kDefaultHideForSinglePage;
+    self.shouldResizeFromCenter = kDefaultShouldResizeFromCenter;
+}
+
+
+#pragma mark - Touch event
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
+{
+    UITouch *touch = [touches anyObject];
+    if (touch.view != self) {
+        NSInteger index = [self.dots indexOfObject:touch.view];
+        if ([self.delegate respondsToSelector:@selector(TAPageControl:didSelectPageAtIndex:)]) {
+            [self.delegate TAPageControl:self didSelectPageAtIndex:index];
+        }
+    }
+}
+
+#pragma mark - Layout
+
+
+/**
+ *  Resizes and moves the receiver view so it just encloses its subviews.
+ */
+- (void)sizeToFit
+{
+    [self updateFrame:YES];
+}
+
+
+- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount
+{
+    return CGSizeMake((self.dotSize.width + self.spacingBetweenDots) * pageCount - self.spacingBetweenDots , self.dotSize.height);
+}
+
+
+/**
+ *  Will update dots display and frame. Reuse existing views or instantiate one if required. Update their position in case frame changed.
+ */
+- (void)updateDots
+{
+    if (self.numberOfPages == 0) {
+        return;
+    }
+    
+    for (NSInteger i = 0; i < self.numberOfPages; i++) {
+        
+        UIView *dot;
+        if (i < self.dots.count) {
+            dot = [self.dots objectAtIndex:i];
+        } else {
+            dot = [self generateDotView];
+        }
+        
+        [self updateDotFrame:dot atIndex:i];
+    }
+    
+    [self changeActivity:YES atIndex:self.currentPage];
+    
+    [self hideForSinglePage];
+}
+
+
+/**
+ *  Update frame control to fit current number of pages. It will apply required size if authorize and required.
+ *
+ *  @param overrideExistingFrame BOOL to allow frame to be overriden. Meaning the required size will be apply no mattter what.
+ */
+- (void)updateFrame:(BOOL)overrideExistingFrame
+{
+    CGPoint center = self.center;
+    CGSize requiredSize = [self sizeForNumberOfPages:self.numberOfPages];
+    
+    // We apply requiredSize only if authorize to and necessary
+    if (overrideExistingFrame || ((CGRectGetWidth(self.frame) < requiredSize.width || CGRectGetHeight(self.frame) < requiredSize.height) && !overrideExistingFrame)) {
+        self.frame = CGRectMake(CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), requiredSize.width, requiredSize.height);
+        if (self.shouldResizeFromCenter) {
+            self.center = center;
+        }
+    }
+    
+    [self resetDotViews];
+}
+
+
+/**
+ *  Update the frame of a specific dot at a specific index
+ *
+ *  @param dot   Dot view
+ *  @param index Page index of dot
+ */
+- (void)updateDotFrame:(UIView *)dot atIndex:(NSInteger)index
+{
+    // Dots are always centered within view
+    CGFloat x = (self.dotSize.width + self.spacingBetweenDots) * index + ( (CGRectGetWidth(self.frame) - [self sizeForNumberOfPages:self.numberOfPages].width) / 2);
+    CGFloat y = (CGRectGetHeight(self.frame) - self.dotSize.height) / 2;
+    
+    dot.frame = CGRectMake(x, y, self.dotSize.width, self.dotSize.height);
+}
+
+
+#pragma mark - Utils
+
+
+/**
+ *  Generate a dot view and add it to the collection
+ *
+ *  @return The UIView object representing a dot
+ */
+- (UIView *)generateDotView
+{
+    UIView *dotView;
+    
+    if (self.dotViewClass) {
+        dotView = [[self.dotViewClass alloc] initWithFrame:CGRectMake(0, 0, self.dotSize.width, self.dotSize.height)];
+        if ([dotView isKindOfClass:[TAAnimatedDotView class]] && self.dotColor) {
+            ((TAAnimatedDotView *)dotView).dotColor = self.dotColor;
+        }
+    } else {
+        dotView = [[UIImageView alloc] initWithImage:self.dotImage];
+        dotView.frame = CGRectMake(0, 0, self.dotSize.width, self.dotSize.height);
+    }
+    
+    if (dotView) {
+        [self addSubview:dotView];
+        [self.dots addObject:dotView];
+    }
+    
+    dotView.userInteractionEnabled = YES;    
+    return dotView;
+}
+
+
+/**
+ *  Change activity state of a dot view. Current/not currrent.
+ *
+ *  @param active Active state to apply
+ *  @param index  Index of dot for state update
+ */
+- (void)changeActivity:(BOOL)active atIndex:(NSInteger)index
+{
+    if (self.dotViewClass) {
+        TAAbstractDotView *abstractDotView = (TAAbstractDotView *)[self.dots objectAtIndex:index];
+        if ([abstractDotView respondsToSelector:@selector(changeActivityState:)]) {
+            [abstractDotView changeActivityState:active];
+        } else {
+            NSLog(@"Custom view : %@ must implement an 'changeActivityState' method or you can subclass %@ to help you.", self.dotViewClass, [TAAbstractDotView class]);
+        }
+    } else if (self.dotImage && self.currentDotImage) {
+        UIImageView *dotView = (UIImageView *)[self.dots objectAtIndex:index];
+        dotView.image = (active) ? self.currentDotImage : self.dotImage;
+    }
+}
+
+
+- (void)resetDotViews
+{
+    for (UIView *dotView in self.dots) {
+        [dotView removeFromSuperview];
+    }
+    
+    [self.dots removeAllObjects];
+    [self updateDots];
+}
+
+
+- (void)hideForSinglePage
+{
+    if (self.dots.count == 1 && self.hidesForSinglePage) {
+        self.hidden = YES;
+    } else {
+        self.hidden = NO;
+    }
+}
+
+#pragma mark - Setters
+
+
+- (void)setNumberOfPages:(NSInteger)numberOfPages
+{
+    _numberOfPages = numberOfPages;
+    
+    // Update dot position to fit new number of pages
+    [self resetDotViews];
+}
+
+
+- (void)setSpacingBetweenDots:(NSInteger)spacingBetweenDots
+{
+    _spacingBetweenDots = spacingBetweenDots;
+    
+    [self resetDotViews];
+}
+
+
+- (void)setCurrentPage:(NSInteger)currentPage
+{
+    // If no pages, no current page to treat.
+    if (self.numberOfPages == 0 || currentPage == _currentPage) {
+        _currentPage = currentPage;
+        return;
+    }
+    
+    // Pre set
+    [self changeActivity:NO atIndex:_currentPage];
+    _currentPage = currentPage;
+    // Post set
+    [self changeActivity:YES atIndex:_currentPage];
+}
+
+
+- (void)setDotImage:(UIImage *)dotImage
+{
+    _dotImage = dotImage;
+    [self resetDotViews];
+    self.dotViewClass = nil;
+}
+
+
+- (void)setCurrentDotImage:(UIImage *)currentDotimage
+{
+    _currentDotImage = currentDotimage;
+    [self resetDotViews];
+    self.dotViewClass = nil;
+}
+
+
+- (void)setDotViewClass:(Class)dotViewClass
+{
+    _dotViewClass = dotViewClass;
+    self.dotSize = CGSizeZero;
+    [self resetDotViews];
+}
+
+
+#pragma mark - Getters
+
+
+- (NSMutableArray *)dots
+{
+    if (!_dots) {
+        _dots = [[NSMutableArray alloc] init];
+    }
+    
+    return _dots;
+}
+
+
+- (CGSize)dotSize
+{
+    // Dot size logic depending on the source of the dot view
+    if (self.dotImage && CGSizeEqualToSize(_dotSize, CGSizeZero)) {
+        _dotSize = self.dotImage.size;
+    } else if (self.dotViewClass && CGSizeEqualToSize(_dotSize, CGSizeZero)) {
+        _dotSize = kDefaultDotSize;
+        return _dotSize;
+    }
+    
+    return _dotSize;
+}
+
+@end

--
Gitblit v1.8.0