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

}

重写UIPageControl实现自定义按钮的更多相关文章

  1. iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

    一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...

  2. Swift - 重写导航栏返回按钮

    // 重写导航栏返回按钮方法 func configBackBtn() -> Void { // 返回按钮 let backButton = UIButton(type: .custom) // ...

  3. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  4. WPF自定义控件与样式(2)-自定义按钮FButton

    一.前言.效果图 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 还是先看看效果 ...

  5. Web jquery表格组件 JQGrid 的使用 - 5.Pager翻页、搜索、格式化、自定义按钮

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  6. django xadmin 插件(3) 列表视图新增自定义按钮

    效果图: 编辑按钮是默认的list_editable属性对应的插件(xadmin.plugins.editable) 放大按钮对应的是自定义插件. 自定义按钮源码: xplugin.py(保证能够直接 ...

  7. 网站上点击自定义按钮发起QQ聊天的解决方案

    一.背景 最近由于开发需要,需要在网站上自定义一个立即交谈的按钮,现将解决方式分享给大家. 二.解决方案 1.首先访问:http://shang.qq.com/widget/consult.php,适 ...

  8. 用仿ActionScript的语法来编写html5——第七篇,自定义按钮

    第七篇,自定义按钮这次弄个简单点的,自定义按钮.其实,有了前面所定义的LSprite,LBitmap等类,定义按钮就很方便了.下面是添加按钮的代码, function gameInit(event){ ...

  9. Expression Blend制作自定义按钮(转)

    来源:http://www.cnblogs.com/iChina/archive/2011/11/25/2262854.html Expression Blend制作自定义按钮 1.从Blend工具箱 ...

随机推荐

  1. HDU 4406 最大费用最大流

    题意:现有m门课程需要复习,已知每门课程的基础分和学分,共有n天可以复习,每天分为k个时间段,每个时间段可以复习一门课程,并使这门课程的分数加一,问在不挂科的情况下最高的绩点. 思路:(没做过费用流的 ...

  2. Android多线程----异步消息处理机制之Handler详解

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  3. linux系统终端命令提示符设置(PS1)记录

    PS(Prompt Sign)指的是命令提示符,在日常运维工作中为了方面操作管理,有时会设定PS1环境变量.废话不多说,下面开始记录下Linux中PS1设置 在/etc/.bashrc中,找到PS1变 ...

  4. FMDB简单使用

    1.增删改查://注意:dataWithPath中的路径参数一般会选择保存到沙箱中的Documents目录中: //如果这个参数设置为nil则数据库会在内存中创建: //如果设置为@””则会在沙箱中的 ...

  5. 呵呵!手把手带你在 IIS 上运行 Python(转)

    原文:http://blog.csdn.net/yangzhencheng_001/article/details/40342449 公司的网站让我头痛死了.在众多前辈高手的带领下,一大堆的 CMD ...

  6. Install MySQL on Mac OS X——MAC安装MySQL

    很多关于如何安装MySQL的教程已经过时了,或者比必须的步骤复杂得多.这篇教程将展示如何安装MySQL,启动MySQL,以root用户进入MySQL,以及创建删除退出数据库. Step 1: 下载My ...

  7. centos一键优化脚本

    centos一键优化脚本:细节:http://oldboy.blog.51cto.com/2561410/1336488网络状态优化:http://oldboy.blog.51cto.com/2561 ...

  8. 变态跳台阶-一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    class Solution { public: int jumpFloorII(int number) { ) ; ) ; *jumpFloorII(number-); } };

  9. Linux 字符集转化

    命令行"iconv --list" 查看Linux操作系统支持的字符集 iconv_open 设置字符集转化 --iconv_t iconv_open(const char *to ...

  10. Discuz! X的CSS加载机制

    首先,每个页面都会加载以下两个css,data/cache/style_1_common.css和data/cache/style_1_forum_index.css.先讲讲这两个文件名的命名规则:第 ...