XDXRatingBar
目录
简介
GitHub仓库 XDXRatingBar 最初灵感来自于由GitHub用户 saiwu-bigkoo 编写的 iOS-RatingBar,并增强了
- 类级别的@IBDesignable和@IBInspectable,以便开发者在Xcode storyboard或xib文件中设置属性并预览UI行为;
- XDXRatingBarManager单例类可以帮助开发者全局配置所有XDXRatingBar实例;
- 下面将介绍更多的小增强功能。
安装
在iOS项目中安装此API的最简单方法是将其文件XDXRatingBar.swift复制到Xcode项目文件夹。
CocoaPods安装
target '<your_project>' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for <your_project>
pod 'XDXRatingBar'
end
提示
XDX评价栏 - 变量
-
变量 "maxRating" 应该是变量 "numberOfStars" 的倍数。在大多数情况下,我建议将它们设置为相同的值。
-
变量 "animated" 表示 XDX评价栏实例在评分改变时是否应该执行动画。如果 "animated" 设置为 false,则 "animationTimeInterval" 的值将无用。
-
变量 "isDecimalRating" 表示 XDX评价栏实例的评分是十进制还是整数。
-
变量 "isIndicator" 决定了用户是否可以通过点击 XDX评价栏来更改评分。然而,即使设置为 true,评分仍然可以通过编程方式更改。
-
变量 "starWidthInsetRatio" 设置星星图像之间的间隔。该值应设置为 0 ~ 0.5。
-
变量 "isDisplayingUnselectedStars" 表示是否应显示未选择的星星图像。如果设置为 false,则 "imageForUnselectedStars" 的值将无用(建议设置为 nil)。
XDX评价栏管理器
XDX评价栏管理器是一个包含项目中的所有 XDX评价栏实例的配置单例类的类。让我们看看一个例子
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
configXDXRatingBarGlobally()
return true
}
func configXDXRatingBarGlobally()
{
XDXRatingBarManager.shared.minRating = 1
XDXRatingBarManager.shared.maxRating = 5
XDXRatingBarManager.shared.numberOfStars = 5
XDXRatingBarManager.shared.animated = true
XDXRatingBarManager.shared.animationTimeInterval = 0.2
XDXRatingBarManager.shared.isDecimalRating = false
XDXRatingBarManager.shared.isIndicator = false
XDXRatingBarManager.shared.starWidthInsetRatio = 0.05
}
只需复制这段代码,并根据项目需求在 AppDelegate 文件中进行一些修改。因此,每次创建 XDX评价栏时,您无需在代码文件或 xib / storyboard 文件中进行覆盖。XDX评价栏管理器中的所有变量都是可选的,因此您无需在 AppDelegate 中执行此操作。
XDX评价栏代理
如果您需要在 XDX评价栏的评分改变时执行某些操作,您只需在 view-controller 或 view-cell 类中确认该协议,例如
class ViewController: UIViewController, XDXRatingBarDelegate
您可以通过编程设置代理,或者将代理拖入 xib / storyboard 文件中。
第一种方法
@IBOutlet weak var ratingBar: XDXRatingBar! {
didSet { ratingBar.delegate = self }
}
第二种方法
override func viewDidLoad()
{
super.viewDidLoad()
ratingBar.delegate = self
}
然后,在 "ratingWillChange" 或 "ratingDidChange" 方法中执行您想要的操作。即使您在类中确认了协议,也不需要实现该方法(因为协议中的方法是可选的)。
func ratingWillChange(_ ratingBar: XDXRatingBar, oldRating: CGFloat, newRating: CGFloat)
{
print("ratingWillChange oldRating: \(oldRating)")
}
func ratingDidChange(_ ratingBar: XDXRatingBar, oldRating: CGFloat, newRating: CGFloat)
{
print("ratingDidChange newRating: \(newRating)")
}
简介
该 GitHub 仓库是基于 saiwu-bigkoo 的仓库 iOS-RatingBar 改编并强化之作,相比 iOS-RatingBar 而言,XDXRatingBar 强化了:
- @IBDesignable 和 @IBInspectable 可以让开发者设置 XDXRatingBar 的属性并预览 UI 效果;
- 为开发者设置全局属性提供了含有单例 shared 的类 XDXRatingBarManager;
- 将在使用技巧中介绍更多的加强。
安装说明
将 XDXRatingBar 安装到 iOS 项目中的最简单方式是直接将 XDXRatingBar.swift 复制到 iOS 项目的 Xcode 项目文件夹中。
Cocoapods 安装:
target '<你的项目名>' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for <你的项目名>
pod 'XDXRatingBar'
end
使用技巧
XDXRatingBar - 变量
-
变量 maxRating (最高评分) 必须是变量 numberOfStars(星星数量) 的倍数。建议设置为相等的值。
-
变量 animated (显示动画) 声明 XDXRatingBar 实例是否需要在评分变化时显示动画。
-
变量 isDecimalRating (小数型评分) 声明 XDXRatingBar 评分是小数还是整数。
-
变量 isIndicator (指示器) 表示 iOS 用户是否不能通过点击 XDXRatingBar 来修改评分。即使该变量值为 true,评分仍可通过代码实现来修改。
-
变量 starWidthInsetRatio (星星之间宽空隙指数) 可用来设置星星图片间距。变量的值需在 0 ~ 0.5 之间。
-
变量 isDisplayingUnselectedStars (显示未选中星星) 声明未选中的星星是否需要显示。如果值为 false 的话,那么 imageForUnselectedStars (未选中星星的图片) 就不会起作用(建议在此将其设置为 nil)。
XDXRatingBarManager
类 XDXRatingBarManager 包含了一个单例来配置项目中所有的 XDXRatingBar 实例。示例代码如下:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
configXDXRatingBarGlobally()
return true
}
func configXDXRatingBarGlobally()
{
XDXRatingBarManager.shared.minRating = 1
XDXRatingBarManager.shared.maxRating = 5
XDXRatingBarManager.shared.numberOfStars = 5
XDXRatingBarManager.shared.animated = true
XDXRatingBarManager.shared.animationTimeInterval = 0.2
XDXRatingBarManager.shared.isDecimalRating = false
XDXRatingBarManager.shared.isIndicator = false
XDXRatingBarManager.shared.starWidthInsetRatio = 0.05
}
将以上代码复制到 iOS 项目的 AppDelegate 文件中,并根据需要进行修改。这样就不需要在每次在代码、xib 或 storyboard 文件中重新配置 XDXRatingBar。该类内部都是 optional 变量,所以以上代码不需要出现在 iOS 项目中。
XDXRatingBarDelegate
如果需要在评分有变化时运行一些代码,可以在 view-controller 或 view-cell 的类中确定协议:
class ViewController: UIViewController, XDXRatingBarDelegate
委托可以通过以下代码实现,也可以在 xib/storyboard 文件中配置。
第一种方式
@IBOutlet weak var ratingBar: XDXRatingBar! {
didSet { ratingBar.delegate = self }
}
第二种方式
override func viewDidLoad()
{
super.viewDidLoad()
ratingBar.delegate = self
}
最后在 ratingWillChange 或 ratingDidChange 方法中添加代码。这两个方法不是必需的,即使协议已经被类确认。
func ratingWillChange(_ ratingBar: XDXRatingBar, oldRating: CGFloat, newRating: CGFloat)
{
print("ratingWillChange oldRating: \(oldRating)")
}
func ratingDidChange(_ ratingBar: XDXRatingBar, oldRating: CGFloat, newRating: CGFloat)
{
print("ratingDidChange newRating: \(newRating)")
}
支持 XDXRatingBar
- ★Star this repo
联系
- LinkedIn: @Chong Xie
许可证
XDXRatingBar 在 MIT 许可证下可用。更多信息请参阅 LICENSE 文件。