带有阴影,圆角和自定义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);

但是如上所述,即使不添加此代码,也会出现阴影问题。

除了这种与圆角和阴影兼容的方法以外,还有其他/更好的方法可以将轻量级元素绘制到视图上吗?我不想在视图中添加任何不必要的额外视图或图像上下文,因为它们需要轻巧和高性能。

回答:

这是一个棘手的问题。UIViewclipsToBounds需要,以获得圆角。但是CALayermasksToBounds必须是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

回到顶部