带有阴影,圆角和自定义drawRect的UIView
我必须创建一个UIView
将具有圆角,边框,阴影的drawRect()
自定义,其方法被重写以提供自定义绘图代码,并通过该代码将多条直线绘制到视图中(我在这里需要使用快速,轻便的方法,因为许多这些视图中的一个可以呈现)。
我当前面临的问题是,一旦drawRect()
在视图类中进行覆盖(即使其中没有任何自定义代码),阴影也将不再适用于圆角。请参见附件中的图片:
在视图控制器中,我使用以下代码:
view.layer.cornerRadius = 10; view.layer.masksToBounds = true;
view.layer.borderColor = UIColor.grayColor().CGColor;
view.layer.borderWidth = 0.5;
view.layer.contentsScale = UIScreen.mainScreen().scale;
view.layer.shadowColor = UIColor.blackColor().CGColor;
view.layer.shadowOffset = CGSizeZero;
view.layer.shadowRadius = 5.0;
view.layer.shadowOpacity = 0.5;
view.layer.masksToBounds = false;
view.clipsToBounds = false;
在覆盖的情况下,drawContext()
我将使用类似:
var context:CGContext = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
CGContextMoveToPoint(context, 0.0, 0.0); //start at this point
CGContextAddLineToPoint(context, 20.0, 20.0); //draw to this point
CGContextStrokePath(context);
但是如上所述,即使不添加此代码,也会出现阴影问题。
除了这种与圆角和阴影兼容的方法以外,还有其他/更好的方法可以将轻量级元素绘制到视图上吗?我不想在视图中添加任何不必要的额外视图或图像上下文,因为它们需要轻巧和高性能。
回答:
这是一个棘手的问题。UIView
的clipsToBounds
需要,以获得圆角。但是CALayer
的masksToBounds
必须是false
这样的阴影是可见的。不知何故,如果drawRect
不被覆盖,一切都会起作用,但实际上不应该被覆盖。
解决方案是创建一个超级视图以提供阴影(在下面的演示中是shadowView
)。您可以在Playground中测试以下内容:
class MyView : UIView { override func drawRect(rect: CGRect) {
let c = UIGraphicsGetCurrentContext()
CGContextAddRect(c, CGRectMake(10, 10, 80, 80))
CGContextSetStrokeColorWithColor(c , UIColor.redColor().CGColor)
CGContextStrokePath(c)
}
}
let superview = UIView(frame: CGRectMake(0, 0, 200, 200))
let shadowView = UIView(frame: CGRectMake(50, 50, 100, 100))
shadowView.layer.shadowColor = UIColor.blackColor().CGColor
shadowView.layer.shadowOffset = CGSizeZero
shadowView.layer.shadowOpacity = 0.5
shadowView.layer.shadowRadius = 5
let view = MyView(frame: shadowView.bounds)
view.backgroundColor = UIColor.whiteColor()
view.layer.cornerRadius = 10.0
view.layer.borderColor = UIColor.grayColor().CGColor
view.layer.borderWidth = 0.5
view.clipsToBounds = true
shadowView.addSubview(view)
superview.addSubview(shadowView)
结果:
以上是 带有阴影,圆角和自定义drawRect的UIView 的全部内容, 来源链接: utcz.com/qa/402752.html