gpt4 book ai didi

ios - UIView 中的径向渐变颜色未更新

转载 作者:行者123 更新时间:2023-11-30 12:36:44 24 4
gpt4 key购买 nike

我正在尝试在我的应用程序中的背景 UIView 上使用径向渐变。我的问题出现了,我想多次更新渐变的 View 颜色。我的代码没有错误,但我似乎不知道如何解决这个问题。

我尝试过的是在常规 UIView 以及渐变类中重新加载输入 View ;删除 uiview 的 subview ,并向屏幕添加一个新 View ,这仅适用于更改设置的颜色;我已经浏览过互联网,但似乎无法解决这个问题。我想要的只是 UIView 根据我提供的新颜色参数更新其颜色。

这是我的径向渐变代码:

import UIKit

class RadialGradient: UIView {


var innerColor = UIColor.yellow
var outterColor = UIColor.red

override func draw(_ rect: CGRect) {

let colors = [innerColor.cgColor, outterColor.cgColor] as CFArray
let endRadius = min(frame.width, frame.height)

let center = CGPoint(x: bounds.size.width/2, y: bounds.size.height/2)

let gradient = CGGradient(colorsSpace: nil, colors: colors, locations: nil)

UIGraphicsGetCurrentContext()!.drawRadialGradient(gradient!,
startCenter: center,
startRadius: 0.0,
endCenter: center,
endRadius: endRadius,
options: CGGradientDrawingOptions.drawsAfterEndLocation)


}

}

这是我使用它的地方:

import UIKit

class TestIssuesVC: UIViewController {

var check : Bool = false

@IBAction func buttonClicked(_ sender: Any) {

if check == true {
backgroundsetting.removeFromSuperview()
print("Why wont you change to purple and black?????")
cheapFix(inner: UIColor.purple, outter: UIColor.black)

} else {

backgroundsetting.removeFromSuperview()

cheapFix(inner: UIColor.red, outter: UIColor.blue)
check = true
}
}

func cheapFix(inner: UIColor, outter: UIColor) {

let backgroundsetting = RadialGradient()

backgroundsetting.innerColor = inner
backgroundsetting.outterColor = outter

backgroundsetting.frame = (frame: CGRect(x: self.view.frame.size.width * 0, y: self.view.frame.size.height * 0, width:self.view.frame.size.width, height: self.view.frame.size.height))
self.view.addSubview(backgroundsetting)
self.view.sendSubview(toBack: backgroundsetting)
self.reloadInputViews()




}
let backgroundsetting = RadialGradient()


override func viewWillAppear(_ animated: Bool) {
backgroundsetting.innerColor = UIColor.green
backgroundsetting.outterColor = UIColor.red

backgroundsetting.frame = (frame: CGRect(x: self.view.frame.size.width * 0, y: self.view.frame.size.height * 0, width:self.view.frame.size.width, height: self.view.frame.size.height))
self.view.addSubview(backgroundsetting)
self.view.sendSubview(toBack: backgroundsetting)
self.reloadInputViews()

}


}

最佳答案

我看到两件事。

  1. 您的cheapFix方法永远不会更新backgroundsetting属性。它创建自己的同名局部变量。因此,您实际上是一遍又一遍地添加新 View ,但每个 View 都会发送到后面,因此您只能看到第一个 View 。这就是为什么一切似乎都没有改变。
  2. 这些都不是必要的。只需创建一个 RadialGradient View 即可。当您希望改变其颜色时,只需更新其颜色即可。该类需要修复,以便在其属性更新时重新绘制自身。

RadialGradient 类中的两个属性进行以下更改:

var innerColor = UIColor.yellow {
didSet {
setNeedsDisplay()
}
}
var outterColor = UIColor.red {
didSet {
setNeedsDisplay()
}
}

这些更改将确保 View 在更新颜色时重新绘制自身。

关于ios - UIView 中的径向渐变颜色未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766614/

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