有时候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. Spring 一二事(4) - 单例

    spring bean配置后再默认情况下是单例的,如果需要配置可以选择 prototype, request, session和global session 在配置spring mvc的action时 ...

  2. Java语法基础(三)----选择结构的if语句、switch语句

    [前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...

  3. [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    from:  http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...

  4. [转] Android实时抓包分析 : 善用adb调试桥

    Android实时抓包分析 : 善用adb调试桥   谈到android网络抓包,很多人都能想到牛逼轰轰的神器tcpdump.方法就是在android机器上面安装tcpdump,然后通过-w参数把抓包 ...

  5. Java 操作 Redis 高级

    /Users/sherry/WorkPath/Git/Web/redisDemo/src/main/java/org/zln/utils/JedisUtils.java package org.zln ...

  6. Java中的IO流系统详解(转载)

    摘要: Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java ...

  7. Swift3.0 iOS获取当前时间 - 年月日时分秒星期

    Swift3.0 iOS获取当前时间 - 年月日时分秒星期func getTimes() -> [Int] { var timers: [Int] = [] // 返回的数组 let calen ...

  8. Oracle 组织架构(转)

    原文地址:Oracle 组织架构 我们先来看一下实际生活中的集团组织架构. 下图是一个典型的投资集团组织架构. 集团在各个国家有独立的法人. 每个法人会负责若干个业务进行,比如石油开采,汽车制造,软件 ...

  9. 拿什么拯救你,我的代码--c#编码规范实战篇 (转)

    http://www.cnblogs.com/lazio10000/p/5413439.html 此文为译文,原文地址请点击. 本文通过重构一个垃圾代码,阐述了如何写出优秀的代码.开发人员及代码审核人 ...

  10. JQuery学习笔记——JQuery基础

    #,JQuery避免名称冲突的方法 var jq = jQuery.noConfilct(); jq.ready( function(){     jq("p").hidden() ...