gpt4 book ai didi

swift3 - 使用用户定义的运行时属性的UIView Shadow

转载 作者:行者123 更新时间:2023-12-04 17:07:51 25 4
gpt4 key购买 nike

使用“用户定义的运行时属性”时,很难显示阴影。

如下所示,如果我使用代码,它似乎完全可以正常工作。

func formatView(view: UIView, cornerRadius: Bool) {

if (cornerRadius) {view.layer.cornerRadius = 12 }
view.layer.shadowColor = UIColor.black.cgColor
view.layer.shadowOffset = CGSize.zero
view.layer.shadowRadius = 3
view.layer.shadowOpacity = 0.3
}

但是,当我尝试使用用户定义的运行时属性时,它不再显示。这些是我目前正在使用的。

enter image description here

唯一奇怪的是,如果我删除了 layer.shadowColor属性,那么它似乎又可以工作了。但是我再也无法控制颜色了。它似乎默认为黑色,但是如果我决定选择灰色,则无法更改它。

这是因为Color属性是UIColor,shadowColor需要CGColor吗?

最佳答案

确实如您所说,因为“用户定义的运行时属性”面板中的Color类型创建了UIColor,但layer.borderColor保留了cgColor类型。

您可以通过创建一个类别来解决此问题,该类别允许通过Interface Builder设置代理颜色:

extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}

get {
return UIColor(cgColor: self.borderColor!)
}
}
}

但是,更好的方法是使用IBDesignable代替用户定义的运行时属性,这一点更加清楚。

为此,您可以在项目中添加一个名为UIViewExtentions.swift的新swift文件(或将其粘贴到任何文件中):
import UIKit

@IBDesignable extension UIView {
@IBInspectable var borderColor:UIColor? {
set {
layer.borderColor = newValue!.cgColor
}
get {
if let color = layer.borderColor {
return UIColor(cgColor:color)
}
else {
return nil
}
}
}
@IBInspectable var borderWidth:CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var cornerRadius:CGFloat {
set {
layer.cornerRadius = newValue
clipsToBounds = newValue > 0
}
get {
return layer.cornerRadius
}
}
}

然后,它将在“界面构建器”中为“实用工具面板”>“属性检查器”中的每个按钮,imageView,标签等可用:

enter image description here

现在,如果您在“属性”检查器中设置值,然后再查看“用户定义的运行时属性”,您会看到它们会自动为您归档!

编辑:
有关更多信息,请参见: http://nshipster.com/ibinspectable-ibdesignable/

关于swift3 - 使用用户定义的运行时属性的UIView Shadow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39627724/

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