国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

自定義UIPageControl

2019-11-09 15:13:30
字體:
來源:轉載
供稿:網友

iOS系統中,UipageControl默認的樣式如下:

圖片

在業務開發過程中,很多時候都需要自定義UIPageControl圓點的展示樣式及圓點之間的間隔。在網上搜索了如何自定義UIPageControl,比比皆是下面的實現方式:

//自定義一個UIPageControl的子類-(void) updateDots{ for (int i = 0; i < [self.subviews count]; i++) { UIImageView* dot = [self.subviews objectAtIndex:i]; if (i == self.currentPage) { if(i==0) { dot.image = [UIImage imageNamed:@"activesearch.png"]; } else { dot.image = activeImage; } } else { if(i==0) { dot.image = [UIImage imageNamed:@"inactivesearch.png"]; } else { dot.image = inactiveImage; } } }}-(void)setCurrentPage:(NSInteger)page{ [super setCurrentPage:page]; [self updateDots];}

但是將其運用到實踐中,會引起崩潰,原因是UIPageControl subviews中的對象并不是UIImageView的實例,而是UIView的實例。

系統是如何實現的?

遍歷subviews數組:

for (int i = self.subviews.count - 1; i >= 0; --i) { UIView *dotView = [self.subviews objectAtIndex:i]; }

打印dotView:

<UIView: 0x7fa47ae99ab0; frame = (193 1.5; 7 7); layer = <CALayer: 0x6080004321a0>>

從中只能看見frame信息,并不知道原點樣式是如何設置的,進一步打印dotView.layer:

//非活動態<CALayer:0x6080004321a0; position = CGPoint (196.5 5); bounds = CGRect (0 0; 7 7); delegate = <UIView: 0x7fa47ae99ab0; frame = (193 1.5; 7 7); layer = <CALayer: 0x6080004321a0>>; opaque = YES; allowsGroupOpacity = YES; cornerRadius = 3.5; backgroundColor = <CGColor 0x60800029ed20> [<CGColorSpace 0x608000036320> (kCGColorSpaceICCBased; kCGColorSpaceModelMonoChrome; 普通灰度系數 2.2 描述文件; extended range)] ( 1 0.2 )>//活動態<CALayer:0x6000004286c0; position = CGPoint (0 0); bounds = CGRect (0 0; 7 7); delegate = <UIView: 0x7ff7b8c87e30; frame = (-3.5 -3.5; 7 7); layer = <CALayer: 0x6000004286c0>>; opaque = YES; allowsGroupOpacity = YES; cornerRadius = 3.5; backgroundColor = <CGColor 0x6000000952c0> [<CGColorSpace 0x600000227120> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; 普通灰度系數 2.2 描述文件; extended range)] ( 1 1 )>

layer的寬高為7,cornerRadius為3.5,非活動態時backgroundColor的alpha = 0.2,活動態時alpha = 1。這就解釋了系統的樣式為什么是圓點和其活動態和非活動態下的透明度。從而得到思路可以修改UIPageControl子view的layer來修改樣式。


自定義實現

自定義CustomCyclePageControl繼承自UIPageControl .h文件:

#import <UIKit/UIKit.h>@interface CustomCyclePageControl : UIPageControl@PRoperty (nonatomic, strong) UIImage *activeDotImage; @property (nonatomic, strong) UIImage *inActiveDotImage;@end

.m文件:

#import "CustomCyclePageControl.h"@interface CustomCyclePageControl ()@property (nonatomic, assign) NSInteger lastActivePage;@end@implementation CustomCyclePageControl- (void)updateDots { if (self.subviews.count > self.currentPage) { UIView *dotView = [self.subviews objectAtIndex:self.currentPage]; dotView.layer.contents = (id)self.activeDotImage.CGImage; dotView.layer.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.6f].CGColor; if (self.lastActivePage != self.currentPage) { if (self.subviews.count > self.lastSelectedPage) { dotView = [self.subviews objectAtIndex:self.lastActivePage]; dotView.layer.contents = (id)self.inActiveDotImage.CGImage; dotView.layer.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.3f].CGColor; } } }}- (void)layoutSubviews { [super layoutSubviews]; if (self.activeDotImage && self.inActiveDotImage) { CGFloat left = CGRectGetWidth(self.frame) - self.activeDotImage.size.width; CGFloat right = CGRectGetMaxX(self.frame); for (int i = self.subviews.count - 1; i >= 0; --i) { UIView *dotView = [self.subviews objectAtIndex:i]; dotView.frame = CGRectMake(left, ((CGRectGetHeight(self.frame) - self.inActiveDotImage.size.height) / 2.f), self.inActiveDotImage.size.width, self.inActiveDotImage.size.height); left -= (4 + self.inActiveDotImage.size.width); dotView.layer.cornerRadius = 0.5f; dotView.layer.contents = (id)self.inActiveDotImage.CGImage; dotView.layer.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.3f].CGColor; } }}- (void)setCurrentPage:(NSInteger)currentPage { [super setCurrentPage:currentPage]; if (self.activeDotImage && self.inActiveDotImage) { [self updateDots]; self.lastActivePage = currentPage; }}@end

注意:自定義時activeDotImage,inActiveDotImage都不能為nil。 自定義之后的樣式:

圖片


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浮山县| 米林县| 永宁县| 德化县| 正安县| 浪卡子县| 香格里拉县| 皮山县| 海安县| 富蕴县| 广东省| 富民县| 磴口县| 公主岭市| 谢通门县| 孙吴县| 昌图县| 射阳县| 长治县| 疏勒县| 扶沟县| 山阴县| 阳信县| 饶阳县| 武宣县| 子洲县| 奈曼旗| 尤溪县| 江安县| 观塘区| 东乡族自治县| 赤水市| 泸水县| 东兰县| 定边县| 鱼台县| 新田县| 河西区| 赤壁市| 本溪市| 阳曲县|