重寫UIPageControl實現自定義按鈕

有時候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];

}函數

相關文章
相關標籤/搜索