diff --git a/SMPageControl.h b/SMPageControl.h index 530c404..d8e6a92 100755 --- a/SMPageControl.h +++ b/SMPageControl.h @@ -29,17 +29,22 @@ typedef NS_ENUM(NSUInteger, SMPageControlTapBehavior) { @property (nonatomic) NSInteger numberOfPages; @property (nonatomic) NSInteger currentPage; -@property (nonatomic) CGFloat indicatorMargin UI_APPEARANCE_SELECTOR; // deafult is 10 -@property (nonatomic) CGFloat indicatorDiameter UI_APPEARANCE_SELECTOR; // deafult is 6 -@property (nonatomic) CGFloat minHeight UI_APPEARANCE_SELECTOR; // default is 36, cannot be less than indicatorDiameter -@property (nonatomic) SMPageControlAlignment alignment UI_APPEARANCE_SELECTOR; // deafult is Center -@property (nonatomic) SMPageControlVerticalAlignment verticalAlignment UI_APPEARANCE_SELECTOR; // deafult is Middle - -@property (nonatomic, strong) UIImage *pageIndicatorImage UI_APPEARANCE_SELECTOR; -@property (nonatomic, strong) UIImage *pageIndicatorMaskImage UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set -@property (nonatomic, strong) UIColor *pageIndicatorTintColor UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set -@property (nonatomic, strong) UIImage *currentPageIndicatorImage UI_APPEARANCE_SELECTOR; -@property (nonatomic, strong) UIColor *currentPageIndicatorTintColor UI_APPEARANCE_SELECTOR; // ignored if currentPageIndicatorImage is set +@property (nonatomic) CGFloat indicatorMargin UI_APPEARANCE_SELECTOR; // deafult is 10 +@property (nonatomic) CGFloat indicatorDiameter UI_APPEARANCE_SELECTOR; // deafult is 6 +@property (nonatomic) CGFloat minHeight UI_APPEARANCE_SELECTOR; // default is 36, cannot be less than indicatorDiameter +@property (nonatomic) SMPageControlAlignment alignment UI_APPEARANCE_SELECTOR; // deafult is Center +@property (nonatomic) SMPageControlVerticalAlignment verticalAlignment UI_APPEARANCE_SELECTOR; // deafult is Middle + +@property (nonatomic, strong) UIImage *pageIndicatorImage UI_APPEARANCE_SELECTOR; +@property (nonatomic, strong) UIImage *pageIndicatorMaskImage UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set +@property (nonatomic, strong) UIColor *pageIndicatorTintColor UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set +@property (nonatomic, strong) UIColor *pageIndicatorTintStrokeColor UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set +@property (nonatomic, assign) CGFloat pageIndicatorTintStrokeWidth UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set + +@property (nonatomic, strong) UIImage *currentPageIndicatorImage UI_APPEARANCE_SELECTOR; +@property (nonatomic, strong) UIColor *currentPageIndicatorTintColor UI_APPEARANCE_SELECTOR; // ignored if currentPageIndicatorImage is set +@property (nonatomic, strong) UIColor *currentPageIndicatorTintStrokeColor UI_APPEARANCE_SELECTOR; // ignored if currentPageIndicatorImage is set +@property (nonatomic, assign) CGFloat currentPageIndicatorTintStrokeWidth UI_APPEARANCE_SELECTOR; // ignored if currentPageIndicatorImage is set @property (nonatomic) BOOL hidesForSinglePage; // hide the the indicator if there is only one page. default is NO @property (nonatomic) BOOL defersCurrentPageDisplay; // if set, clicking to a new page won't update the currently displayed page until -updateCurrentPageDisplay is called. default is NO diff --git a/SMPageControl.m b/SMPageControl.m index b0eb1fa..5efedd0 100755 --- a/SMPageControl.m +++ b/SMPageControl.m @@ -78,6 +78,9 @@ - (void)_initialize { _numberOfPages = 0; _tapBehavior = SMPageControlTapBehaviorStep; + + _currentPageIndicatorTintStrokeWidth = 1.0f; + _pageIndicatorTintStrokeWidth = 1.0f; self.backgroundColor = [UIColor clearColor]; @@ -146,6 +149,8 @@ - (void)_renderPages:(CGContextRef)context rect:(CGRect)rect CGFloat xOffset = left; CGFloat yOffset = 0.0f; UIColor *fillColor = nil; + UIColor *strokeColor = nil; + CGFloat strokeWidth = 1.0f; UIImage *image = nil; CGImageRef maskingImage = nil; CGSize maskSize = CGSizeZero; @@ -155,12 +160,16 @@ - (void)_renderPages:(CGContextRef)context rect:(CGRect)rect if (i == _displayedPage) { fillColor = _currentPageIndicatorTintColor ? _currentPageIndicatorTintColor : [UIColor whiteColor]; + strokeColor = _currentPageIndicatorTintStrokeColor; + strokeWidth = _currentPageIndicatorTintStrokeWidth; image = _currentPageImages[indexNumber]; if (nil == image) { image = _currentPageIndicatorImage; } } else { fillColor = _pageIndicatorTintColor ? _pageIndicatorTintColor : [[UIColor whiteColor] colorWithAlphaComponent:0.3f]; + strokeColor = _pageIndicatorTintStrokeColor; + strokeWidth = _pageIndicatorTintStrokeWidth; image = _pageImages[indexNumber]; if (nil == image) { image = _pageIndicatorImage; @@ -180,7 +189,8 @@ - (void)_renderPages:(CGContextRef)context rect:(CGRect)rect } } - [fillColor set]; + [fillColor setFill]; + if (strokeColor) [strokeColor setStroke]; CGRect indicatorRect; if (image) { yOffset = [self _topOffsetForHeight:image.size.height rect:rect]; @@ -197,6 +207,10 @@ - (void)_renderPages:(CGContextRef)context rect:(CGRect)rect CGFloat centeredXOffset = xOffset + floorf((_measuredIndicatorWidth - _indicatorDiameter) / 2.0f); indicatorRect = CGRectMake(centeredXOffset, yOffset, _indicatorDiameter, _indicatorDiameter); CGContextFillEllipseInRect(context, indicatorRect); + if (strokeColor) { + CGContextSetLineWidth(context, strokeWidth); + CGContextStrokeEllipseInRect(context, CGRectInset(indicatorRect, strokeWidth * 0.5f, strokeWidth * 0.5f)); + } } [pageRects addObject:[NSValue valueWithCGRect:indicatorRect]]; @@ -404,6 +418,7 @@ - (void)setStyleWithDefaults:(SMPageControlStyleDefaults)defaultStyle self.indicatorDiameter = DEFAULT_INDICATOR_WIDTH_LARGE; self.indicatorMargin = DEFAULT_INDICATOR_MARGIN_LARGE; self.pageIndicatorTintColor = [[UIColor whiteColor] colorWithAlphaComponent:0.2f]; + self.pageIndicatorTintStrokeColor = nil; self.minHeight = DEFAULT_MIN_HEIGHT_LARGE; break; case SMPageControlDefaultStyleClassic: @@ -411,6 +426,7 @@ - (void)setStyleWithDefaults:(SMPageControlStyleDefaults)defaultStyle self.indicatorDiameter = DEFAULT_INDICATOR_WIDTH; self.indicatorMargin = DEFAULT_INDICATOR_MARGIN; self.pageIndicatorTintColor = [[UIColor whiteColor] colorWithAlphaComponent:0.3f]; + self.pageIndicatorTintStrokeColor = nil; self.minHeight = DEFAULT_MIN_HEIGHT; break; }