ImageView 渐变行为异常
Posted
技术标签:
【中文标题】ImageView 渐变行为异常【英文标题】:ImageView Gradient behaving abnormally 【发布时间】:2017-10-29 18:16:08 【问题描述】:我将渐变(透明 - 黑色)应用于图像视图,在它上面我有一个浮动按钮。一切正常。唯一的问题是,每当点击浮动按钮时,渐变开始越来越多地增加到黑色。我的渐变从上到下清晰到黑色。但在互动时,它开始慢慢变黑。
我真的无法解决这个错误。
此图像视图位于 UIcollectionResuableView 中。以下是您关注的代码。
func addBlackGradientLayerprof(frame: CGRect)
let gradient = CAGradientLayer()
gradient.frame = frame
let black = UIColor.init(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.65).cgColor
gradient.colors = [UIColor.clear.cgColor, black]
gradient.locations = [0.0, 1.0]
self.layer.addSublayer(gradient)
带有浮动按钮的标题视图:
override func layoutSubviews()
super.layoutSubviews()
profilePic.addBlackGradientLayerprof(frame: profilePic.bounds)
override func awakeFromNib()
super.awakeFromNib()
layoutFAB()
func layoutFAB()
floaty.openAnimationType = .slideDown
floaty.addItem("New Post", icon: UIImage(named: "photo-camera")) item in
self.delegate.fabUploadClicked()
floaty.addItem("Settings", icon: UIImage(named: "settingsB")) item in
self.delegate.fabSettingsClicked()
floaty.paddingY = (frame.height - 30) - floaty.frame.height/2
floaty.fabDelegate = self
floaty.buttonColor = UIColor.white
floaty.hasShadow = true
floaty.size = 45
addSubview(floaty)
【问题讨论】:
点击按钮时会调用什么代码?您是否不止一次致电addBlackGradientLayerprof
?
是的!我不知道为什么,但由于某种原因,当视图加载以及关闭浮动按钮时,layoutSubviews()
会被调用两次。
@LeoDabus 那太完美了。问题已解决
@LeoDabus 这个问题不是重复的。这个问题的背景是找出为什么我有多层渐变而不是如何有渐变。答案确实给了我另一个解决我的问题的方法,它没有解决它。我要求您删除重复的标志,因为这会误导其他用户。
【参考方案1】:
layoutSubviews
不适合做任何事情,除了根据需要调整几帧。它可以在视图的生命周期中被多次调用。您不应该从layoutSubviews
添加图层。
您应该从一个保证在对象的生命周期内只被调用一次的地方调用addBlackGradientLayerprof
。 awakeFromNib
是一个可能的地方。
【讨论】:
我试过了。但这会导致梯度无法成功覆盖图像的问题。我什至在这里发布了一个关于它的问题。 ***.com/questions/46753710/… 在layoutSubviews
你可以调整图层的框架。只是不要添加另一个。
好吧,正如我所见。我只是添加一个对吗?我只是调用框架一次。我在这里想念什么。我该如何处理?
layoutSubviews
可以被多次调用,包括视图框架发生变化时以及其他时间。这就是您不想从layoutSubviews
添加新层的原因。但是由于视图的框架可以改变,您需要更新图层的框架以匹配。
嘿,问题解决了。并感谢您的帮助。我在我的许多 VC 中都调用了 LayoutSubviews。这让我指出了其他几个错误并解决了它们以上是关于ImageView 渐变行为异常的主要内容,如果未能解决你的问题,请参考以下文章