FXPageControl 1.6

FXPageControl 1.6

测试已测试
Lang语言 Obj-CObjective C
许可证 NOASSERTION
发布上次发布2022年11月

Nick Lockwood 维护。



  • 作者
  • Nick Lockwood

用途

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,除非指定,否则将绘制为黑色。如果您只指定了 selectedDotColordotColor 将自动设置为相同的颜色,但透明度为 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

  • 初始发布