据说UIImageView是专门为显示图片做的控件,用了最优显示技术,所以不让调用darwrect方法。所以我们如果写了一个UIImageView的子类里面重写了drawRect方法是不会被调用的。
import UIKit
//UIImageView中不会调用drawRect方法
class ProgressImageView: UIImageView {
override func draw(_ rect: CGRect) {
let path = UIBezierPath(ovalIn: rect)
UIColor.red.setFill()
path.fill()
}
}
如果我们想实现在imageView中有绘制的操作的,我们可以自定义一个view,然后把这个view添加到这个imageView中,然后再进行绘制操作,比如说我们可以这么做
class ProgressImageView: UIImageView {
//MARK: - 构造函数
init()
{
super.init(frame: CGRect.zero)
setUI()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
//懒加载进度控件的view
private lazy var progressView:ProgressView = ProgressView()
//设置UI的函数
private func setUI()
{
//1、添加控件
addSubview(progressView)
//2、设置布局
progressView.mas_makeConstraints { (make) in
make?.edges.mas_equalTo()(self)
}
}
}
private class ProgressView:UIView
{
override func draw(_ rect: CGRect) {
let path = UIBezierPath(ovalIn: rect)
UIColor.red.setFill()
path.fill()
}
}