gpt4 book ai didi

ios - 自定义 @IBDesignable UIButton 使 Xcode 崩溃

转载 作者:行者123 更新时间:2023-12-01 19:30:04 25 4
gpt4 key购买 nike

我想在 Swift 中为我的 iOS 项目设计一个带阴影的圆形按钮。所以我想出了以下自定义按钮类:

import UIKit

@IBDesignable class MainButton: UIButton {
private var shadowLayer: CAShapeLayer!

override init(frame: CGRect) {
super.init(frame: frame)
}

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

override func layoutSubviews() {
super.layoutSubviews()

let image = createBackgroundImage()
setBackgroundImage(image, for: UIControl.State.normal)
clipsToBounds = true

contentEdgeInsets = UIEdgeInsets(top: 5, left: 20, bottom: 5, right: 20)

layer.masksToBounds = false
layer.shadowColor = UIColor.black.cgColor
layer.shadowOffset = CGSize(width: 0, height: 3)
layer.shadowOpacity = 0.2
layer.shadowRadius = 6
}

func createBackgroundImage() -> UIImage {
let rect = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
UIGraphicsBeginImageContextWithOptions(frame.size, false, 0)
let color = UIColor.white
color.setFill()
UIBezierPath(roundedRect: rect, cornerRadius: frame.height * 0.5).addClip()
color.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
}
一旦我在我的 Storyboard 中为按钮设置了此类,“IBDEsignablesAgent-iOS”进程就会占用我近 100% 的 CPU,而 Xcode 会自行挂起。这种行为几乎不可能正确地调试问题。
我很确定我以错误的顺序或错误的方法做某事。但我不知道如何解决它。希望这里有人可以为我指出正确的方向。
谢谢,
延斯

最佳答案

只需检查 View 的大小是否实际发生了变化:

private var lastSize: CGSize = .zero

override func layoutSubviews() {
super.layoutSubviews()

guard frame.size != lastSize else { return }

lastSize = frame.size

...
}
创建阴影很慢, layoutSubviews每秒调用数十次(基本上是每帧一次)。

关于ios - 自定义 @IBDesignable UIButton 使 Xcode 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63391598/

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