gpt4 book ai didi

ios - 带有阴影、圆角和自定义 drawRect 的 UIView

转载 作者:IT老高 更新时间:2023-10-28 11:35:11 31 4
gpt4 key购买 nike

我必须创建一个自定义的 UIView,它将具有圆角、边框、阴影,并且它的 drawRect() 方法被覆盖以提供自定义绘图代码在 View 中绘制了几条直线(我需要在这里使用一种快速、轻量级的方法,因为可能会渲染许多这些 View )。

我目前面临的问题是,一旦我在 View 类中覆盖 drawRect(),阴影就不再适用于圆角(即使还没有任何自定义代码)它)。不同之处见附图:

enter image description here

在 View Controller 中,我使用以下代码:

    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);

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

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

最佳答案

这是一个棘手的问题。 UIViewclipsToBounds 是获得圆角所必需的。但是 CALayermasksToBounds 必须为 false 以便阴影可见。不知何故,如果 drawRect 没有被覆盖,一切都会正常工作,但实际上它不应该。

解决方案是创建一个superview来提供阴影(在下面的演示中这是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)

结果:

enter image description here

关于ios - 带有阴影、圆角和自定义 drawRect 的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25591389/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com