项目中用到好多星星评分,整理了一下给大家分享下
星星.png
我封装了一个类,以适应星星评分的各种情况。下面直接上代码
1、调用类使用
1.1 创建
//let starView = JNStarRateView.init(frame: CGRect(x: 20,y: 60,width: 300,height: 50))//默认的是5颗星,分数为0分
let starView = JNStarRateView.init(frame: CGRect(x: 20,y: 60,width: 300,height: 50), starCount: 6, score: 3.0)
self.view.addSubview(starView)
1.2关闭用户操作,默认是开启的
starView.userInteractionEnabled = false//不支持用户操作
1.3支持滑动评分,默认是点击评分
starView.allowUserPan = true//滑动评星
1.4只支持完整星星评分,默认是一分等于一颗星,允许0.1颗星
starView.allowUnderCompleteStar = false // 完整星星
1.5支持动画,默认是不支持
starView.usePanAnimation = true
1.6通过协议代理返回评分后的分数,别忘记了准守协议哦
starView.delegate = self
func starRate(view starRateView: JNStarRateView, score: Float) {
print(score)
}
2、类源码实现原理
通过在星星view里创建两个view
private var starBackgroundView:UIView!
private var starForegroundView:UIView!
在view里通过循环创建单个星星
//添加星星
let width = self.frame.size.width / CGFloat(count)
for index in 0...count {
let imageView = UIImageView.init(frame: CGRect(x:CGFloat(index) * width,y: 0,width:width,height:self.bounds.size.height))
imageView.image = UIImage(named: imageName)
starView.addSubview(imageView)
}
再通过重设starForegroundView的frame来实现星星评分,是不是很简单,下面附上github上的代码demo(swift3.0写的,如运行不了,请升级到Xcode8):https://github.com/yinjining/JNStarRateView
网友评论