美文网首页
swift 评分控件星星的实现

swift 评分控件星星的实现

作者: iOS_开发 | 来源:发表于2017-06-11 20:09 被阅读0次

评分控件可以只需要传入显示的view和所需评分,简单易集成


class YWRatingView: UIView {

    //MARK -- property
    var max = 5.0   //最大的星星数
    var starHeight = 16.0 //星星高度
    var starSpace: Double = 4 //星星间距
    static var KeyNoRating = "KeyNoRating"
    
    var emptyImageViews = [UIImageView]()    //空星星图片数组
    var fullImageViews = [UIImageView]()     //满星星图片数组
    
    var value = 0.0 {
        didSet {
            if value > max {
                value = max
            }else if value < 0 {
                value = 0
            }
            
            for (i,imageView) in fullImageViews.enumerate() {
                let i = Double(i)
                if value >= i+1 {
                    imageView.layer.mask = nil
                    imageView.hidden = false
                }else if value>i && value < i+1 {
                    let maskLayer = CALayer()
                    maskLayer.frame = CGRect(x: 0, y: 0, width: (value - i) * starHeight, height: starHeight)
                    maskLayer.backgroundColor = UIColor.blackColor().CGColor
                    imageView.layer.mask = maskLayer
                    imageView.hidden = false
                }else if value <= i {
                    imageView.layer.mask = nil
                    imageView.hidden = true
                }
            }
        }
    }
    
    
    init(starHeight: Double, max: Double) {
        self.starHeight = starHeight
        self.max = max
        self.starSpace = starHeight * 0.15
        let frame = CGRect(x: 0, y: 0, width: starHeight * max + starSpace * (max - 1), height: starHeight)
        super.init(frame: frame)
        for i in 0...4 {
            let i = Double(i)
            let emptyImageView = UIImageView(image: UIImage(named: "empty_star"))
            let fullImageView = UIImageView(image: UIImage(named: "full_star"))
            let frame = CGRect(x: starHeight * i + starSpace * i , y: 0, width: starHeight, height: starHeight)
            emptyImageView.frame = frame
            fullImageView.frame = frame
            emptyImageViews.append(emptyImageView)
            fullImageViews.append(fullImageView)
            addSubview(emptyImageView)
            addSubview(fullImageView)
        }
    }
    
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    
    
    static func showInView(view: UIView, value: Double, max: Double = 5) {
        
        for subView in view.subviews {
            if let subView = subView as? YWRatingView {
                subView.value = value
                return
            }
        }
        let ratingView = YWRatingView(starHeight: Double(view.frame.size.height), max: max)
        ratingView.hidden = false
        view.addSubview(ratingView)
        ratingView.value = value
        
        if let label = objc_getAssociatedObject(view, &KeyNoRating) as? UILabel {
            label.hidden = true
        }
        
    }
    
    //没有评分,显示无评分的label
    static func showNoRating(view: UIView) {
        for subview in view.subviews {
            if let subview = subview as? YWRatingView {
                subview.hidden = true
            }
        }
        
        var label = objc_getAssociatedObject(view, &KeyNoRating) as? UILabel
        if label == nil {
            label = UILabel(frame: CGRectMake(0, 0, view.frame.size.width , view.frame.size.height))
            label!.font = UIFont.systemFontOfSize(13)
            view.addSubview(label!)
            label?.text = "暂无评分"
            objc_setAssociatedObject(view, &KeyNoRating, label, objc_AssociationPolicy.OBJC_ASSOCIATION_ASSIGN)
        }
        label?.hidden = false
        
    }

相关文章

  • swift 评分控件星星的实现

    评分控件可以只需要传入显示的view和所需评分,简单易集成

  • swift星星评分控件

    项目中用到好多星星评分,整理了一下给大家分享下 我封装了一个类,以适应星星评分的各种情况。下面直接上代码 1、调用...

  • Swift 星星评分控件 改写

    前言: 突然需要使用星星评分控件了。我们使用Swift开发,闲的就改写了一个库。 Objective-C原作者地址...

  • 实现评分星星by Swift

    星星评分,支持手势滑动,支持非满星。大致原理是使用UIImageView排列来实现,加上手势,就完成这个功能了,封...

  • iOS 星星评分控件

    简单的自用星星控件,有空再加上手势 星星的间距取的是星星的宽度的五分之一,view的宽度等于五个星星加上四个空隙 ...

  • RatingBar Android星星评分控件

    简述: 一个的自定义的Android评分控件(极简洁,易用)!可更改图标,大小,间距,可选半图模式,点击模式,拖动...

  • iOS自定义星星评分

    一个使用星星评分的控件 (星星的图片在最后面)StarRatingView.h StarRatingView.m ...

  • 星星评分控件TQStarRatingView揭秘!(一)

    今天为大家带来一个iOS星级评分控件的实现,欢迎拍砖。 在github上搜索iOS星级评分控件,可以看到TQSta...

  • SwiftStarRatingView使用简介

    简介 SwiftyStarRatingView 是一个用 swift 3.0 编写的评分控件,可以支持自定义图片和...

  • 星星评分控件TQStarRatingView揭秘!(二)

    上一篇给大家介绍了TQStarRatingView是如何来处理分数展示的。 这次我们来讲讲其它一些内容。 首先讲讲...

网友评论

      本文标题:swift 评分控件星星的实现

      本文链接:https://www.haomeiwen.com/subject/ilsqattx.html