当前位置: 首页 > news >正文

iOS自定义UIPageControl

写在前面

我就知道会有这一天,之前因为公司的APP弹窗的种类太多,不得不自己写一个弹窗类,为每一个弹窗类型设定一个类。现在也是因为分页符的类型太多,不得不自定义。网上的都不符合自己的需求,所以自己写了一个,贴出来,如果写的不好希望大家能给修改意见。

代码

.h文件


#import <UIKit/UIKit.h>

typedef enum : NSInteger{
    //自定义pagecontrol的类型
    NKPageControlStyleA,
    NKPageControlStyleB,
}NKPageControlStyle;

@interface NKPageControl : UIPageControl

- (instancetype)initWithStyle:(NKPageControlStyle)pageControlStyle;


@end


复制代码

.m文件


#import "NKPageControl.h"

@interface NKPageControl ()

@property (nonatomic, assign) NKPageControlStyle style;

@end

@implementation NKPageControl

-(instancetype) initWithStyle:(NKPageControlStyle)pageControlStyle
{
    self = [super init];
    
    //在这里获取到创建pageControl的种类
    _style = pageControlStyle;
    
    return self;
}

-(void) updateDots
{
    if (_style == NKPageControlStyleA)
    {
        //循环获取每一个小圆点(小圆点的类型是UIView)
        for (int i = 0; i < self.subviews.count; i++)
        {
            if (i == 0)
            {
                //获取到一个小圆点
                UIView *dot = [self.subviews objectAtIndex:i];
                dot.backgroundColor = [UIColor clearColor];
                //创建imageView放在小圆点上
                UIImageView *imageView;
                if (dot.subviews.count == 0)
                {
                    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, dot.frame.size.width, dot.frame.size.height)];
                    [dot addSubview:imageView];
                }
                else
                {
                    imageView = dot.subviews.firstObject;
                }
                //判断小圆点是否是当前页面,根据不同状态设置不同图片
                if (i == self.currentPage)
                {
                    imageView.image = [UIImage imageNamed:@"page_main_selected"];
                }
                else
                {
                    imageView.image = [UIImage imageNamed:@"page_main"];
                }
            }
        }
    }
    else if (_style == NKPageControlStyleB)
    {
        //自定义种类    
    }
}

-(void) setCurrentPage:(NSInteger)page
{
    [super setCurrentPage:page];
    //每次设置当前活动的小圆点时,重新配置图片
    [self updateDots];
}

复制代码

使用

    _pageControl = [[NKPageControl alloc] initWithStyle:NKPageControlStyleA];
    //常规设置
    _pageControl.frame = CGRectMake(0 , 0, WIDTH_VIEW, 20);//小圆点控件的大小位置
    _pageControl.numberOfPages = 4;//小圆点个数
    _pageControl.currentPage = 0;
    //配置颜色
    //    _pageControl.pageIndicatorTintColor = [UIColor whiteColor];
    //    _pageControl.currentPageIndicatorTintColor = [UIColor lightGrayColor];
    _pageControl.userInteractionEnabled = NO;//关闭与  用户的交互
    //添加导视图中
    [self.view addSubview:_pageControl];

复制代码

pageControl的图片类型一样

如果pageControl的图片类型一样的话,可以使用KVC设置图片,代码如下


[pageControl setValue:[UIImage imageNamed:@"image1"] forKeyPath:@"_pageImage"];

[pageControl setValue:[UIImage imageNamed:@"image2"] forKeyPath:@"_currentPageImage"];

复制代码

相关文章:

  • React-Native flex 布局使用总结
  • Artifactory 如何使用 SHA-256 进行安全存储?
  • weex具体安装教程
  • 中科院2018研究生入学考试 数学分析+高等代数
  • canal数据同步目录
  • 原生JS操作DOM
  • knn algorithm--python( classifying)
  • javascript常见问题总结
  • linux中find 查询命令
  • linux svn 使用
  • 【使用Postman测试web接口】Postman的安装与入门
  • 阿里开源了14个核心技术,你了解哪些?
  • 流式大数据处理的三种框架:Storm,Spark和Samza
  • Akka2
  • neo4j入门开发,以及在sns关系中的应用
  • express如何解决request entity too large问题
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • vue-router 实现分析
  • 测试如何在敏捷团队中工作?
  • 彻底搞懂浏览器Event-loop
  • 浮动相关
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 老板让我十分钟上手nx-admin
  • 力扣(LeetCode)357
  • 山寨一个 Promise
  • 深入浅出Node.js
  • 网络应用优化——时延与带宽
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 《码出高效》学习笔记与书中错误记录
  • AI算硅基生命吗,为什么?
  • linux 淘宝开源监控工具tsar
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (2)Java 简介
  • (26)4.7 字符函数和字符串函数
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (分类)KNN算法- 参数调优
  • (算法)求1到1亿间的质数或素数
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .gitignore
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net6使用WebSocket与前端进行通信
  • [2016.7 test.5] T1
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [bzoj1038][ZJOI2008]瞭望塔
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#] 我的log4net使用手册
  • [C#]C# OpenVINO部署yolov8图像分类模型