Ios 在UIView上设置多个边框

Ios 在UIView上设置多个边框,ios,ios6,uiview,uikit,quartz-graphics,Ios,Ios6,Uiview,Uikit,Quartz Graphics,由于我找不到这方面的任何问题/答案,我认为这是不可能的 是否仍然可以在ui视图上设置多个边框 我目前正在使用.layer.borderWidth和layer.borderColor设置标准边框。我想知道是否可以在视图中添加多笔划/边框效果 我需要一个4.0f的白色边框,然后是另一种颜色的1.0f边框。这是不可能的,你必须通过在你的xib/视图中添加带有背景色的UIView来伪造边框。如果没有添加图层,单例UIView就不可能做到这一点 您可以做的是创建一个比需要大的视图,适当地设置其边框,然后添

由于我找不到这方面的任何问题/答案,我认为这是不可能的

是否仍然可以在
ui视图上设置多个边框

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


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

这是不可能的,你必须通过在你的xib/视图中添加带有背景色的
UIView
来伪造边框。

如果没有添加图层,单例
UIView
就不可能做到这一点

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


使用
CALayers
通常比完整的
UIView
要快,但您也可以使用嵌套的
UIView
来实现相同的效果。

我可以想到三种解决方案:

  • 将UIView嵌套在另一个视图中,为每个视图定义一个边框
  • -(void)drawRect
    中自己绘制边框
  • 使用可调整大小的
    UIImageView
    ;可拉伸的边框图像作为背景(最佳解决方案性能)
    • 试试这个

      我用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;
      

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

      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)
      
      输出看起来像下图,带有外部白色边框和内部黑色边框: