4

由于我找不到任何问题/答案,我想这是不可能的。

无论如何要在UIView.

我目前正在使用.layer.borderWidthand设置标准边框layer.borderColor。我想知道是否可以向视图添加多个笔触/边框效果。

我需要一个白色的 4.0f 边框,然后是另一种颜色的 1.0f 边框。

4

5 回答 5

3

我能想到的三个解决方案:

  • 在另一个中嵌套一个 UIView,为每个定义一个边框;
  • 自己画边框-(void)drawRect
  • 使用UIImageView可调整大小的 an;可拉伸的边框图像作为背景(性能方面的最佳解决方案)。
于 2013-09-16T14:46:50.600 回答
2

UIView这在不添加层的情况下使用单个实例是不可能的。

您可以做的是创建一个大于所需的视图,适当地设置其边框,然后添加 aCALayer并将其放置在您想要内边框的位置并适当地设置其边框属性。

UsingCALayers通常比 full blasted 快UIView,但你也可以只使用一个嵌套UIView来实现相同的效果。

于 2013-09-16T14:46:29.113 回答
2

您可以使用此扩展插入两个不同宽度的层:

extension CALayer {
    func addGradientBorder(colors:[UIColor],width:CGFloat = 1) {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame =  CGRect(origin: CGPoint.zero, size: self.bounds.size)
        gradientLayer.startPoint = CGPoint(x:0.0, y:0.0)
        gradientLayer.endPoint = CGPoint(x:1.0,y:1.0)
        gradientLayer.colors = colors.map({$0.cgColor})

        let shapeLayer = CAShapeLayer()
        shapeLayer.lineWidth = width
        shapeLayer.path = UIBezierPath(rect: self.bounds).cgPath
        shapeLayer.fillColor = nil
        shapeLayer.strokeColor = UIColor.red.cgColor
        gradientLayer.mask = shapeLayer

        self.addSublayer(gradientLayer)
    }
}

使用不同的宽度/颜色来获得所需的效果:

yourView.layer.addGradientBorder(colors:[UIColor.black,UIColor.black] , width: 20)
yourView.layer.addGradientBorder(colors:[UIColor.white,UIColor.white] , width: 10)

输出如下图所示,带有白色外边框和黑色内边框:

输出看起来像这样,外部白色边框和内部黑色边框

于 2018-11-15T11:06:32.197 回答
1

这是不可能的,您必须通过UIView向您的 xib/view 添加带有背景颜色的 's 来伪造边框。

于 2013-09-16T14:44:11.297 回答
1

试试这个,

我正在添加带有 alpha 1 的阴影,它将充当内部边框。正常边界作为外边界给出。

yourView.frame = CGRectInset(yourView.frame, -borderWidth, -borderWidth);
yourView.layer.borderColor = [UIColor blackColor].CGColor;
yourView.layer.borderWidth = borderWidth;


yourView.layer.shadowColor = [UIColor whiteColor].CGColor;
yourView.layer.shadowOffset = CGSizeMake(0, 1);
yourView.layer.shadowOpacity = 1;
yourView.layer.shadowRadius = 1.0;
yourView.clipsToBounds = YES;
于 2014-12-06T08:25:07.740 回答