使用用户定义的运行时属性的 UIView 阴影
Posted
技术标签:
【中文标题】使用用户定义的运行时属性的 UIView 阴影【英文标题】:UIView Shadow using User Defined Runtime Attributes 【发布时间】:2016-09-21 22:54:21 【问题描述】:当我使用“用户定义的运行时属性”时,我很难显示阴影。
如果我使用代码,它似乎完全可以正常工作,如下所示。
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 吗?
【问题讨论】:
请注意,有点令人困惑的是,对于 UILabel,“.shadowColor”确实只是一个 UIColor (!!!!!!!!!!) 所以你可以只使用 u.d.r.a !!! 【参考方案1】:确实如您所说,因为用户定义的运行时属性面板中的Color
类型创建了一个UIColor
,但layer.borderColor
拥有一个cgColor
类型。
您可以通过创建一个允许通过 Interface Builder 设置代理颜色的类别来解决此问题:
extension CALayer
var borderUIColor: UIColor
set
self.borderColor = newValue.cgColor
get
return UIColor(cgColor: self.borderColor!)
但更好的方法是使用 IBDesignable 而不是 User Defined Runtime Attributes,这样更清楚。
您可以通过在项目中添加一个名为 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 > Attributes Inspector 中的每个按钮、imageView、标签等提供:
现在,如果您在属性检查器中设置值并回顾用户定义的运行时属性,您会看到它们会自动为您归档!
编辑: 更多内容见:http://nshipster.com/ibinspectable-ibdesignable/
【讨论】:
我只是想评论一下,这对我来说非常有效。我对将来可以使用它的可能性感到兴奋。您还帮助我最终了解了扩展的力量。不过有一个问题,我的更改应该在 main.storyboard 中生效还是仅在我运行应用程序时生效。目前我看到他们正在运行,只是没有在故事板上。 我很高兴能帮上忙 :) 现在,当您扩展现有控件时,属性不会实时呈现,而只会在您运行应用程序时呈现。目前,@IBDesignable 和@IBInspectable 实时渲染仅支持使用class CustomButton: UIButton @IBInspectable var highlightedBackgroundColor:UIColor?
等子类的自定义控件@以上是关于使用用户定义的运行时属性的 UIView 阴影的主要内容,如果未能解决你的问题,请参考以下文章