[swift] 星級評定View

項目中需要設(shè)計一個星級評定的需求瑞妇,特封裝一個View作為星級評定的使用

效果如下:

LDStarEvaluationView.gif

自定義一個StarEvaluationView季惯,在View上添加五個Button吗蚌,點擊對應(yīng)的button將該button之前的按鈕都設(shè)置為高亮圖片永票,之后的按鈕設(shè)置為默認圖片

//
//  LDStarEvaluationView.swift
//
//

import UIKit

//block回調(diào)
typealias LDStarEvaluationTapBlock = (_ starEvaluationView: LDStarEvaluationView,_ index : Int) ->()

class LDStarEvaluationView: UIView {
    
    //block回調(diào)

    var starEvaluationTapBlock: LDStarEvaluationTapBlock!
    
    //默認圖片
    var defaultImage: UIImage?
    
    //高亮圖片
    var lightImage: UIImage?
    
    
    
    /// 星級評定
    ///
    /// - Parameters:
    ///   - frame: 視圖frame
    ///   - starIndex: 評定星級級別
    ///   - starWidth: 每個星星的寬度
    ///   - starSpace: 星星之間的間隔
    ///   - normalImage: 默認狀態(tài)圖片
    ///   - lightImage: 高亮狀態(tài)圖片
    ///   - isCanTap: 上方可以編輯
    init(frame: CGRect, index starIndex: Int, width starWidth: CGFloat = 20, space starSpace: CGFloat = 5, normalImage defaultImage: UIImage = UIImage(named: "star_evaluation_normal")!,selectImage lightImage: UIImage = UIImage(named: "star_evaluation_light")!, isCanEdit isCanTap: Bool) {
        super.init(frame: frame)
        self.defaultImage = defaultImage
        self.lightImage = lightImage
        
        setupUI(index: starIndex, width: starWidth, space: starSpace, isTap: isCanTap)
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    private func setupUI(index starIndex: Int, width starWidth: CGFloat, space starSpace: CGFloat, isTap isCanTap: Bool){
        for i in 0..<5 {
            let btn = UIButton()
            btn.frame = CGRect(x: CGFloat(i) * (starWidth + starSpace), y: 0, width: starWidth, height: self.height)
            btn.isEnabled = isCanTap
            btn.tag = i + 1
            btn.addTarget(self, action: #selector(starTapBtn(_:)), for: .touchUpInside)
            btn.imageEdgeInsets = UIEdgeInsetsMake((self.height - starWidth) * 0.5, 0, (self.height - starWidth) * 0.5, 0)
            if i < starIndex {
                btn.setImage(self.lightImage, for: .normal)
            } else {
                btn.setImage(self.defaultImage, for: .normal)
            }
            btn.adjustsImageWhenHighlighted = false
            self.addSubview(btn)
            
            self.width = (starWidth + starSpace) * 5
        }
    }
    
    @objc func starTapBtn(_ sender: UIButton) {
        for i in 1...5  {
            let starBtn = self.viewWithTag(i) as! UIButton
            if i <= sender.tag {
                starBtn.setImage(self.lightImage, for: .normal)
            } else {
                starBtn.setImage(self.defaultImage, for: .normal)
            }
        }
        if starEvaluationTapBlock != nil {
            starEvaluationTapBlock(self, sender.tag)
        }
    }
}

使用方法

        let rect = CGRect(x: 100, y: textField.y + textField.height + 100, width: 150, height: 44)
        let startView = LDStarEvaluationView(frame: rect, index: 3, isCanEdit: true)
        startView.starEvaluationTapBlock = {(starView, starIndex) in
            print(" \(starView )  \n  \(starIndex)")
        }
        view.addSubview(startView)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奖慌,一起剝皮案震驚了整個濱河市扮宠,隨后出現(xiàn)的幾起案子西乖,更是在濱河造成了極大的恐慌,老刑警劉巖坛增,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件获雕,死亡現(xiàn)場離奇詭異,居然都是意外死亡收捣,警方通過查閱死者的電腦和手機届案,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罢艾,“玉大人楣颠,你說我怎么就攤上這事「莉牵” “怎么了童漩?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長春锋。 經(jīng)常有香客問我矫膨,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任侧馅,我火速辦了婚禮直奋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘施禾。我一直安慰自己脚线,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布弥搞。 她就那樣靜靜地躺著邮绿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攀例。 梳的紋絲不亂的頭發(fā)上船逮,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音粤铭,去河邊找鬼挖胃。 笑死,一個胖子當著我的面吹牛梆惯,可吹牛的內(nèi)容都是我干的酱鸭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼垛吗,長吁一口氣:“原來是場噩夢啊……” “哼凹髓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起怯屉,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔚舀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锨络,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赌躺,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年羡儿,在試婚紗的時候發(fā)現(xiàn)自己被綠了礼患。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡失受,死狀恐怖讶泰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拂到,我是刑警寧澤痪署,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站兄旬,受9級特大地震影響狼犯,放射性物質(zhì)發(fā)生泄漏余寥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一悯森、第九天 我趴在偏房一處隱蔽的房頂上張望宋舷。 院中可真熱鬧,春花似錦瓢姻、人聲如沸祝蝠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绎狭。三九已至,卻和暖如春褥傍,著一層夾襖步出監(jiān)牢的瞬間儡嘶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工恍风, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹦狂,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓朋贬,卻偏偏與公主長得像凯楔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兄世,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,110評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫啼辣、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,102評論 4 62
  • 文/周蘭萍 生活党远,一半現(xiàn)實削解,一半幻想; 生命沟娱,一半驚喜氛驮,一半憂慮; 婚姻济似,一半堅持矫废,一半演繹; 家庭砰蠢,一半容忍蓖扑,一...
    3acc31e6b8fd閱讀 554評論 1 5
  • 我跟老公聊天,說就快到12周了台舱,聽說三個月孕吐就會好轉(zhuǎn)呢律杠。這家伙竟然說,啊,不是吐得越厲害說明寶寶發(fā)育越好么柜去,你一...
    LubQ閱讀 110評論 1 1