有時候UIPageControl須要用到白色的背景, 那麼會致使上面的點按鈕看不見或不清楚,
咱們能夠經過繼承該類重寫函數來更換點按鈕的圖片現實.
實現思路以下.
新建類繼承UIPageControl :
@interface MyPageControl : UIPageControl
{
UIImage *imagePageStateNormal;
UIImage *imagePageStateHighlighted;
}
- (id)initWithFrame:(CGRect)frame;
@property (nonatomic, retain) UIImage *imagePageStateNormal;
@property (nonatomic, retain) UIImage *imagePageStateHighlighted;
@end
複製代碼
聲明瞭初始化該類的函數
用了兩個UIIma
接下來實現該類以及重寫父類方法:
@interface MyPageControl(private) // 聲明一個私有方法, 該方法不容許對象直接使用
- (void)updateDots;
@end
@implementation MyPageControl // 實現部分
@synthesize imagePageStateNormal;
@synthesize imagePageStateHighlighted;
- (id)initWithFrame:(CGRect)frame { // 初始化
self = [super initWithFrame:frame];
return self;
}
- (void)setImagePageStateNormal:(UIImage *)image { // 設置正常狀態點按鈕的圖片
[imagePageStateHighlighted release];
imagePageStateHighlighted = [image retain];
[self updateDots];
}
- (void)setImagePageStateHighlighted:(UIImage *)image { // 設置高亮狀態點按鈕圖片
[imagePageStateNormal release];
imagePageStateNormal = [image retain];
[self updateDots];
}
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { // 點擊事件
[super endTrackingWithTouch:touch withEvent:event];
[self updateDots];
}
- (void)updateDots { // 更新顯示全部的點按鈕
if (imagePageStateNormal || imagePageStateHighlighted)
{
NSArray *subview = self.subviews; // 獲取全部子視圖
for (NSInteger i = 0; i < [subview count]; i++)
{
UIImageView *dot = [subview objectAtIndex:i]; // 如下不解釋, 看了基本明白
dot.image = self.currentPage == i ? imagePageStateNormal : imagePageStateHighlighted;
}
}
}
- (void)dealloc { // 釋放內存
[imagePageStateNormal release], imagePageStateNormal = nil;
[imagePageStateHighlighted release], imagePageStateHighlighted = nil;
[super dealloc];
}
@end
複製代碼
OK, 在添加處加入如下來實例化該對象代碼:
MyPageControl *pageControl = [[MyPageControl alloc] initWithFrame:CGRectMake(0,0, 200, 30)];
pageControl.backgroundColor = [UIColor clearColor];
pageControl.numberOfPages = 5;
pageControl.currentPage = 0;
[pageControl setImagePageStateNormal:[UIImage imageNamed:@"pageControlStateNormal.png"]];
[pageControl setImagePageStateHighlighted:[UIImage imageNamed:@"pageControlStateHighlighted.png"]];
[self.view addSubview:pageControl];
[pageControl release];這裏有點問題在休整一下:若是直接作setCurrentPage的話,圖片就會失效了,因此覆寫setCurrentPage// 覆寫setCurrentPage
- (void)setCurrentPage:(NSInteger)currentPage
{
[super setCurrentPage:currentPage];
[self updateDots];
}函數