gpt4 book ai didi

ios - 如何正确使用 setNeedsDisplay()

转载 作者:行者123 更新时间:2023-11-28 16:06:06 25 4
gpt4 key购买 nike

在我的程序中,我使用 slider 更改当前所选颜色的 alpha 级别。
当 slider 更改其值时,它调用我的 setColor() 方法来更新使用新的 alpha 值更新当前颜色并更新显示当前颜色的 uiview。
在此函数内部,我还尝试更新我的自定义 uiview,即 powerButton,如下所示。
我改变了内环的颜色,然后通过调用setNeedsDisplay() 重新绘制它。
我滑动和改变颜色的次数越多,程序开始越来越滞后。

这是因为不断重绘吗?有一个更好的方法吗?

此外,setNeedsDisplay() 是覆盖之前的绘图还是实际更新?

  @IBAction func brightnessSliderChanged(sender: UISlider) {
let currentVal = Int(sender.value)
let alpha = CGFloat(Int(currentVal)) * 0.01
brightnessLabel.text = String(currentVal) + "%"
setColor(currentColor.colorWithAlphaComponent(alpha))
}
func setColor(color: UIColor) {
let alpha = CGFloat(Int(lightBrightnessSlider.value)) * 0.01
currentColor = color.colorWithAlphaComponent(alpha)
colorView.backgroundColor = currentColor
if powerState {
powerButton.statusColor = currentColor
powerButton.setNeedsDisplay()
}
}

以及自定义 UIView 类和函数是什么样的

@IBDesignable

class PowerButton: UIView {

@IBInspectable var buttonColor: UIColor = UIColor.whiteColor()
@IBInspectable var statusColor: UIColor = UIColor.whiteColor()
let desiredLineWidth:CGFloat = 3

override func drawRect(rect: CGRect) {
drawFillCircle()
drawRing()
drawInnerCircle()
}
internal func drawFillCircle()->() {

let halfSize:CGFloat = min( bounds.size.width/2, bounds.size.height/2)

let circlePath = UIBezierPath(
arcCenter: CGPoint(x:halfSize,y:halfSize),
radius: CGFloat( CGFloat(halfSize) - (desiredLineWidth / 2)),
startAngle: CGFloat(0),
endAngle:CGFloat(M_PI * 2),
clockwise: true)

let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.CGPath

shapeLayer.fillColor = statusColor.CGColor

layer.addSublayer(shapeLayer)
}

Example of the lag that occurs the more I change the color value

最佳答案

您的应用程序滞后是因为您在每次调用 drawRect() 时都添加了一个形状层。因此,层次结构变得越来越大。

你应该只添加一次形状层,并且只改变它的颜色和路径。

关于ios - 如何正确使用 setNeedsDisplay(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40254357/

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