自定义UIButton导致情节提要代理崩溃迅速

问题描述 投票:0回答:1

我创建了一个自定义UIButton类,它导致情节提要代理失败。我将扩展程序包括在内,因为我真的不知道问题出在哪里。我试图从情节提要中调试此视图,但它直接将我带到汇编代码。我试图使它成为没有@IBDesignable的对象,但仍然会导致崩溃。另外,如果您提供改善我的课堂写作技巧的小知识,我将很高兴听到他们的声音。如果您能帮助我,我会很高兴这是我的课程:

@IBDesignable class customButton: UIButton{

    private let imagesPadding: CGFloat = 2
    private var ArrowSymbleImageView: UIImageView!

    @IBInspectable var iconImageInspectable: UIImage = UIImage(systemName: "globe")!{
          willSet {
            if (ArrowSymbleImageView != nil) {
                ArrowSymbleImageView.image = newValue
            }
         }
    }

    @IBInspectable var BackgroundColorInspectable: UIColor = .white {
         willSet {
            self.backgroundColor  = newValue
            if (ArrowSymbleImageView != nil) {
                if (self.BackgroundColorInspectable.isDarkColor) {
                   ArrowSymbleImageView.tintColor = .white
                }else{
                   ArrowSymbleImageView.tintColor = .black
                }
            }
         }
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        self.generalInit()
    }

    private func generalDeinit() {
        ArrowSymbleImageView.removeFromSuperview()
    }

    private func generalInit() {

        self.backgroundColor = self.BackgroundColorInspectable

        self.roundCorners(corners: [.bottomLeft], radius: self.width() / 2 * 0.7)
        self.dropShadow()


        let sizePartFromView: CGFloat = 4
        ArrowSymbleImageView = UIImageView(frame: CGRect(x: self.width() / 2 - (self.width() / sizePartFromView / 2),
                                                         y: self.height() / 2 - (self.height() / sizePartFromView / 2),
                                                         width: self.width() / sizePartFromView,
                                                         height: self.height() / sizePartFromView))
        ArrowSymbleImageView.image = self.iconImageInspectable
        if (self.BackgroundColorInspectable.isDarkColor) {
            ArrowSymbleImageView.tintColor = .white
        }else{
            ArrowSymbleImageView.tintColor = .black
        }
        ArrowSymbleImageView.contentMode = .scaleAspectFill
        self.addSubview(ArrowSymbleImageView)
    }
}


internal extension UIView {
   func roundCorners(corners: UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.cgPath
        layer.mask = mask
    }
}


internal extension UIView {

    func dropShadow(scale: Bool = true, size: CGSize = CGSize(width: -2, height: 2)) {
    layer.masksToBounds = false
    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOpacity = 0.5
    layer.shadowOffset = size
    layer.shadowRadius = 1

    layer.shadowPath = UIBezierPath(rect: bounds).cgPath
    layer.shouldRasterize = true
    layer.rasterizationScale = scale ? UIScreen.main.scale : 1
  }

  func dropShadow(color: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 1, scale: Bool = true) {
    layer.masksToBounds = false
    layer.shadowColor = color.cgColor
    layer.shadowOpacity = opacity
    layer.shadowOffset = offSet
    layer.shadowRadius = radius

    layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
    layer.shouldRasterize = true
    layer.rasterizationScale = scale ? UIScreen.main.scale : 1
  }
}

internal extension UIColor
{
    var isDarkColor: Bool {
        var r, g, b, a: CGFloat
        (r, g, b, a) = (0, 0, 0, 0)
        self.getRed(&r, green: &g, blue: &b, alpha: &a)
        let lum = 0.2126 * r + 0.7152 * g + 0.0722 * b
        return  lum < 0.50 ? true : false
    }
}
swift crash xcode-storyboard ibdesignable
1个回答
0
投票

我注意到了:

 UIImage(systemName: "globe")!

您为什么以这种方式实例化自定义图像? “ globe”是苹果提供的默认图片吗?

如果这不是默认图像,则应该真正使用。

UIImage(named:"globe")!
© www.soinside.com 2019 - 2024. All rights reserved.