UIImage 的多个属性有更优雅的方法吗?

时间:2021-01-03 19:10:16

标签: swift

有没有办法创建像我希望 UIImage 具有的属性数组?因为我经常不得不做这种重复的模式(如果可能,我想去掉'userImage.layer'部分):

    override func awakeFromNib() {
    super.awakeFromNib()
    
    userImage.contentMode = .scaleAspectFill
    userImage.layer.borderWidth = 1
    userImage.layer.masksToBounds = false
    userImage.layer.borderColor = UIColor.red.cgColor
    userImage.layer.cornerRadius = self.frame.height / 2
    self.clipsToBounds = true
    // Initialization code
}

1 个答案:

答案 0 :(得分:1)

简短的回答是:没有官方支持的方式在 UIKit* 中对这些属性进行分组。

许多人最终在 UIKit 之上构建了一个薄的“样式层”。我见过的一些方法,从比较流行到不太流行:

  • 创建某种“样式”到属性的映射,并在视图/视图控制器生命周期的某个时间点手动将样式应用到 UIImage(awakeFromNib 是个好地方)。
  • 子类化要设置样式的类并创建某种接受“样式”的自定义初始值设定项。你最终只会得到 1 个子类。并非每个 UIKit 类都可以安全地进行子类化,所以 YMMV。
  • 子类化您想要设置样式的类,并使每个子类映射到不同的样式。你最终会得到许多子类。并非每个 UIKit 类都可以安全地进行子类化,所以 YMMV。

* 有 UIAppearance,但不是每个属性或类都支持它。您通常可以查看头文件来弄清楚这一点。