美文网首页
自定义控件(Label、progress)

自定义控件(Label、progress)

作者: Dove_Q | 来源:发表于2016-08-19 11:49 被阅读36次

Label

enum VLabelTextModel {
    case Top
    case Center
    case Bottom
}

class VLabel: UIView {
    let label = UILabel()
    
    //计算属性
    var text: String! {
        set {
            self.label.text = newValue
        }
        
        get {
            return self.label.text
        }
    }
    
    var verticalModel: VLabelTextModel = .Top
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        self.addSubview(label)
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        self.addSubview(label)
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        //计算文字所需要占据的区域
        var rect = label.textRectForBounds(self.bounds, limitedToNumberOfLines: 0)
        
        switch verticalModel {
        case .Top:
            break
        case .Center:
            rect.origin.y = self.bounds.size.height / 2 - rect.size.height / 2
        case .Bottom:
            rect.origin.y = self.bounds.size.height - rect.size.height
        }
        
        label.frame = rect
    }
}

ProgressView

class ProgressView: UIView {

    private var p: CGFloat = 0
    var progress: CGFloat {
        set {
            if newValue < 0 {
                p = 0
            }
            else if newValue > 1 {
                p = 1
            }
            else {
                p = newValue
            }
            
            self.setNeedsLayout()  //让系统调用layoutSubviews
        }
        
        get {
            return p
        }
    }
    
    var trackView = UIView()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        self.addSubview(trackView)
        setColors()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        self.addSubview(trackView)
        setColors()
    }
    
    func setColors() {
        self.backgroundColor = UIColor.blueColor()
        trackView.backgroundColor = UIColor.redColor()
    }

    //不应该直接调用
    override func layoutSubviews() {
        super.layoutSubviews()
        
        trackView.frame = CGRect(x: 0, y: 0, width: self.frame.size.width * progress, height: self.frame.size.height)
    }
}

相关文章

网友评论

      本文标题:自定义控件(Label、progress)

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