用途
FXPageControl 是 Apple 的 UIPageControl 的内置替代品,它复制了标准控制的所有功能,同时增加了编辑点颜色、大小和间距的能力。
支持的 iOS & SDK 版本
- 支持的构建目标 - iOS 11.0 (Xcode 14.0.1)
- 最早支持的部署目标 - iOS 11.0
- 最早兼容的部署目标 - iOS 9.0
注意:“支持”意味着该库已与该版本进行过测试。“兼容”意味着该库应可在该 iOS 版本上运行(即它不依赖任何不可用的 SDK 功能),但不再进行兼容性测试,可能需要调整或修复错误才能正确运行。
ARC 兼容性
从版本 1.2 开始,FXPageControl 需要 ARC。如果您想在非 ARC 项目中使用 FXPageControl,只需将 `-fobjc-arc` 编译器标志添加到 FXPageControl.m 类中。为此,请转到您的目标设置中的“构建阶段”选项卡,打开“编译源”组,在列表中双击 FXPageControl.m,并在弹出窗口中输入 `-fobjc-arc`。
如果您想将整个项目转换为 ARC,请注释掉 FXPageControl.m 中的 #error 行,然后在 Xcode 中运行“编辑”>“重构”>“转换为 Objective-C ARC...”工具,并确保您希望使用 ARC 的所有文件都已选中(包括 FXPageControl.m)。
安装
只需将 FXPageControl.m 和 .h 文件拖入到您的项目中。在 Interface Builder 中,为您的窗口添加一个新视图。设置大小约为 320 x 36 点,并将其类设置为 FXPageControl(您也可以通过使用以下方式程序化创建控件)
[[FXPageControl alloc] initWithFrame:CGRectMake(0, 0, 320, 36)])
现在,您可以像使用 Apple 文档中描述的标准 UIPageControl 一样连接 FXPageControl。
配置
FXPageControl 支持 UIPageControl 中的所有方法(iOS 6 中引入的 tint 选项除外)。要更改点的外观、形状、大小和间距,请使用控件以下属性
@property (nonatomic, strong) UIImage *dotImage;
@property (nonatomic, assign) CGPathRef dotShape;
@property (nonatomic, assign) CGFloat dotSize;
@property (nonatomic, strong) UIColor *dotColor;
@property (nonatomic, strong) UIColor *dotShadowColor;
@property (nonatomic, assign) CGFloat dotShadowBlur;
@property (nonatomic, assign) CGSize dotShadowOffset;
@property (nonatomic, assign) CGFloat dotBorderWidth;
@property (nonatomic, strong) UIColor *dotBorderColor;
@property (nonatomic, strong) UIImage *selectedDotImage;
@property (nonatomic, assign) CGPathRef selectedDotShape;
@property (nonatomic, assign) CGFloat selectedDotSize;
@property (nonatomic, strong) UIColor *selectedDotColor;
@property (nonatomic, strong) UIColor *selectedDotShadowColor;
@property (nonatomic, assign) CGFloat selectedDotShadowBlur;
@property (nonatomic, assign) CGSize selectedDotShadowOffset;
@property (nonatomic, assign) CGFloat selectedDotBorderWidth;
@property (nonatomic, strong) UIColor *selectedDotBorderColor;
@property (nonatomic, assign) CGFloat dotSpacing;
dotColor
/selectedDotColor
属性默认值为 nil,除非指定,否则将绘制为黑色。如果您只指定了 selectedDotColor
,dotColor
将自动设置为相同的颜色,但透明度为 25%。
dotShape
/selectedDotShape
属性默认值为 NULL
,并会被当作 FXPageControlDotShapeCircle
处理。您可以使用提供的形状常量之一,或者提供自己的 CGPath 以绘制每个点。请注意,路径将会被保留。
selectedDotSize
属性默认值为 0,并将默认设置为与 dotSize
相同的大小(为了向后兼容)。
dotShadowColor
/selectedDotShadowColor
属性默认值为 nil
,并会被当作透明处理。
dotBorderColor
/selectedDotBorderColor
属性默认值为 nil
,并会被当作透明处理。
dotBorderWidth
/selectedDotBorderWidth
属性默认值为 0
。
dotImage
/selectedDotImage
属性默认值为 nil
,如果设置了将会覆盖形状和颜色选项。
dotSpacing
属性指定常规(未选中)点之间的间距(以点为单位)。没有对应的“selectedDotSpacing”属性。
大多数这些属性可以通过程序化设置,或者通过使用 Interface Builder 中的用户自定义运行时属性功能在 Interface Builder 中设置。或者,您可以创建一个 FXPageControl 的子类,并覆盖在 -setUp
方法中设置的字段默认值。
与标准 UIPageControl 不同,您也可以通过设置以下属性为 YES 使 FXPageControl 能够循环。
@property (nonatomic, assign, getter = isWrapEnabled) BOOL wrapEnabled;
您可以通过设置以下属性为 YES 将 FXPageControl 水平对齐。
@property (nonatomic, assign, getter = isVertical) BOOL vertical;
注意:除了 CGPathRef 值之外,所有这些属性都可以直接在 Interface Builder 中设置。
设置委托
要单独设置点图像或颜色,实现FXPageControl委托。这将允许您为不同的点索引指定不同的图像或颜色。
FXPageControlDelegate提供了以下方法,全部为可选方法:
- (nullable UIImage *)pageControl:(FXPageControl *)pageControl imageForDotAtIndex:(NSInteger)index;
- (CGPathRef)pageControl:(FXPageControl *)pageControl shapeForDotAtIndex:(NSInteger)index;
- (UIColor *)pageControl:(FXPageControl *)pageControl colorForDotAtIndex:(NSInteger)index;
- (nullable UIImage *)pageControl:(FXPageControl *)pageControl selectedImageForDotAtIndex:(NSInteger)index;
- (CGPathRef)pageControl:(FXPageControl *)pageControl selectedShapeForDotAtIndex:(NSInteger)index;
- (UIColor *)pageControl:(FXPageControl *)pageControl selectedColorForDotAtIndex:(NSInteger)index;
如果需要在运行时更改特定点的颜色、形状或图像,请在FXPageControl上调用-setNeedsDisplay以强制它重新绘制。
请注意,从-pageControl:shapeForDotAtIndex:方法创建并返回的CGPath需要自动释放,以防止内存泄漏。最简单的方法是使用UIBezierPath创建CGPath。
发布说明
版本 1.6
- 现在需要iOS 9或更高版本
- 添加了可为空性注释
- 添加了对Swift Package Manager的支持
版本 1.5
- 现在需要iOS 6或更高版本
- 添加了对VoiceOver的支持
- 添加了对Xcode UITesting的支持
- 添加了borderWidth、borderColor、selectedBorderWidth和selectedBorderColor属性
- 提高了与AutoLayout的兼容性
版本 1.4
- 添加了vertical属性以实现垂直页面控件
- 添加了IBInspectable属性,以便在Interface Builder中更简单地配置
- 现在像标准UIPageControl一样在触摸释放时处理触摸操作,而不是触摸按下
版本 1.3.2
- 添加了intrinsicContentSize方法以支持AutoLayout
版本 1.3.1
- 自定义点图像现在正确居中
- 修复了针对iOS 5+时的一些警告
- 修复了示例项目中的一些布局问题
版本 1.3
- 增加了对自定义点形状的支持
- 增加了对点阴影的支持
- 现在可以为选中点指定不同的大小
- 现在符合-Weverything警告级别
版本 1.2.1
- 修复了自定义点图像委托方法中的错误
- 如果指定了selectedDotColor,现在将自动设置dotColor
- 添加了Podspec
版本 1.2
- 重命名为FXPageControl
- FXPageControl现在需要ARC。有关详情请参阅README
- 增加了对自定义点图像的支持
- 将wrap属性重命名为wrapEnabled
版本 1.1.1
- 如果边界改变,视图现在会自动重新绘制
版本 1.1
- 添加了wrap属性
- 将默认颜色更改为黑色
- 添加了来自标准UIPageControl的缺失方法和属性
- 修复了示例代码中当点击页面控件时的闪烁问题
版本 1.0
- 初始发布