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

标签 ios swift uiimageview uiimage ibdesignable

我是初学者。我想制作一个包含用于制作 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/

相关文章:

ios - AppStore 应用价格

swift - 在 Swift 中,如何在 View Controller 中找到 UILayoutGuide 对象?

ios - 通用 Sprite 尺寸

ios - 如何在滚动时使 UIImage 淡入淡出?

ios - UILabel更新时,UIImageView消失

ios - 如何显示多个 UIImageView

ios - 无法将从相机拍摄的图像传递到另一个 View Controller

ios - 不区分大小写与 Core Data 和 Swift 比较

iphone - 不确定如何在 Objective-c 中添加两个 MD5 哈希值

swift - 在 UIPageViewController 中拖动项目