Jas*_*ady 5 swift3 ios10 xcode8
当我使用"用户定义的运行时属性"时,我很难显示阴影.
如果我使用代码,它似乎完全正常,如下所示.
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
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用用户定义的运行时属性尝试它时,它不再显示.这些是我目前正在使用的.
唯一奇怪的是,如果我删除layer.shadowColor属性,那么它似乎再次起作用.但我无法控制颜色.它似乎默认为黑色,但如果我决定选择灰色,我将无法改变它.
这是因为Color属性是UIColor而shadowColor需要CGColor吗?
jo.*_*.On 11
确实如您所述,因为" Color用户定义的运行时属性"面板中的类型创建了一个类型UIColor但layer.borderColor保留了cgColor类型.
您可以通过创建允许通过Interface Builder设置代理颜色的类别来解决此问题:
extension CALayer {
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但更好的方法是使用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
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,这将在Interface Builder中为Utilities面板> Attributes Inspector中的每个按钮,imageView,标签等提供:
现在,如果您在Attributes Inspector中设置值并回顾用户定义的运行时属性,您将看到它们会自动归档给您!
编辑:有关更多信息,请参阅:http://nshipster.com/ibinspectable-ibdesignable/
| 归档时间: |
|
| 查看次数: |
3982 次 |
| 最近记录: |