swift3 – 使用用户定义的运行时属性的UIView阴影
当我使用“用户定义的运行时属性”时,我很难显示阴影.
如果我使用代码,它似乎完全正常,如下所示. 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 } 但是当我使用用户定义的运行时属性尝试它时,它不再显示.这些是我目前正在使用的. 唯一奇怪的是,如果我删除了layer.shadowColor属性,那么它似乎再次起作用.但我无法控制颜色.它似乎默认为黑色,但如果我决定选择灰色,我将无法改变它. 这是因为Color属性是UIColor而shadowColor需要CGColor吗?
确实如您所述,因为“用户定义的运行时属性”面板中的“颜色”类型创建了一个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 } } } 然后,这将在Interface Builder中为Utilities Panel中的每个按钮,imageView,标签等提供.属性检查员: 现在,如果您在Attributes Inspector中设置值并回顾用户定义的运行时属性,您将看到它们会自动归档给您! 编辑: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |