gpt4 book ai didi

ios - 如何在 Swift 中制作可设计的 UIImage

转载 作者:搜寻专家 更新时间:2023-11-01 06:01:31 24 4
gpt4 key购买 nike

我是初学者。我想制作一个包含用于制作 Designable UIImage 的代码的 swift 文件,因此我不会通过编码来编辑 UI 元素显示,只需在 Interface builder 中通过将此 swift 文件分配给 UI 类即可。

我可以在 UIButton 中做类似的事情,例如,如果我想制作圆角并向 UIButton 添加边框,我可以做这样的事情

import UIKit

@IBDesignable
class DesignableButton: UIButton {

@IBInspectable var cornerRadiusOfButton : CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadiusOfButton
}
}

@IBInspectable var borderWidth: CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}

@IBInspectable var borderColor: UIColor? {
set {
guard let uiColor = newValue else { return }
layer.borderColor = uiColor.cgColor
}
get {
guard let color = layer.borderColor else { return nil }
return UIColor(cgColor: color)
}
}


}

对于UIImage,通常我们想加圆角或者做圆形的UIImage,就用这段代码

// round corner
someImage.layer.cornerRadius = checkinPhoto.bounds.width/20
someImage.clipsToBounds = true

// circular image
someImage.layer.cornerRadius = someImage.frame.size.width / 2
someImage.clipsToBounds = true

如何像上面的 Designable UIButton 一样将这些代码制作成 UIImage 的 @IBDesignable 代码类?我试图通过子类化 UIImage 来制作,但我不知道为什么我无法访问 layerclipToBounds

最佳答案

您不能将 UIImage 用作可设计的,因为 UIImage 不是 UIView 的子类,您需要使 UIImageView< 可设计 相反,UIImage 不能自己渲染,需要一个 UIImageView 来渲染

使用这个类

import UIKit

@IBDesignable
class RoundableImageView: UIImageView {

@IBInspectable var cornerRadius : CGFloat = 0.0{
didSet{
self.applyCornerRadius()
}
}

@IBInspectable var borderColor : UIColor = UIColor.clear{
didSet{
self.applyCornerRadius()
}
}

@IBInspectable var borderWidth : Double = 0{
didSet{
self.applyCornerRadius()
}
}

@IBInspectable var circular : Bool = false{
didSet{
self.applyCornerRadius()
}
}

func applyCornerRadius()
{
if(self.circular) {
self.layer.cornerRadius = self.bounds.size.height/2
self.layer.masksToBounds = true
self.layer.borderColor = self.borderColor.cgColor
self.layer.borderWidth = CGFloat(self.borderWidth)
}else {
self.layer.cornerRadius = cornerRadius
self.layer.masksToBounds = true
self.layer.borderColor = self.borderColor.cgColor
self.layer.borderWidth = CGFloat(self.borderWidth)
}
}

override func awakeFromNib() {
super.awakeFromNib()
self.applyCornerRadius()
}

override func layoutSubviews() {
super.layoutSubviews()
applyCornerRadius()
}

}

关于ios - 如何在 Swift 中制作可设计的 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com