swift - 自定义 UIButton 导致 Storyboard Agent 崩溃 Swift

标签 swift crash xcode-storyboard ibdesignable

我创建了一个自定义 UIButton 类,它导致 Storyboard代理失败。 我包括我的扩展,因为我真的不知道问题是什么。 我尝试从 Storyboard 中调试此 View ,但它直接将我发送到汇编代码。 我尝试将其设置为不带@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
    }
}

最佳答案

我注意到了这一点:

 UIImage(systemName: "globe")!

您以这种方式实例化自定义图像有什么原因吗? “地球仪”是苹果提供的默认图像吗?

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

UIImage(named:"globe")!

关于swift - 自定义 UIButton 导致 Storyboard Agent 崩溃 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956661/

相关文章:

objective-c - 由于辅助线程尝试更新UI而导致应用程序崩溃

c++ - 尝试学习指针时练习程序崩溃

ios - 如何将 subview 的 subview 置于顶部?

ios - 具有水平和垂直分页的 UICollectionViewLayout

c# - 我希望 C# 窗体崩溃而不向我显示红十字会

swift - IBOutlet 和 IBAction 的名称冲突?

ios - 如何从 UIStoryboardPopoverSegue 获取由 UIPopoverController 包装的 View Controller ?

ios - 使用 iOS/swift 对 OAuth2 和 Eventbrite 进行身份验证时出现 “Oops, something went wrong” 错误

ios - UIButton底部出现白线