由于我找不到任何问题/答案,我想这是不可能的。
无论如何都要在UIView
上设置多个边框。
我目前正在使用.layer.borderWidth
和layer.borderColor
设置标准边框。我想知道我是否可以为视图添加多笔画/边框效果。
我需要4.0f的白色边框,然后是另一种颜色的1.0f。
答案 0 :(得分:2)
对于没有添加图层的单个UIView
实例,这是不可能的。
您可以做的是创建一个大于必要的视图,适当地设置其边框,然后添加CALayer
并将其放置在您想要内边框的位置并适当地设置其边框属性。
使用CALayers
通常比完整版UIView
更快,但您也可以使用嵌套UIView
来实现相同的效果。
答案 1 :(得分:2)
我能想到的三个解决方案:
-(void)drawRect
; UIImageView
;作为背景的可拉伸的边界图像(性能最佳的解决方案)。答案 2 :(得分:1)
这是不可能的,你必须通过为你的xib / view添加带有背景颜色的UIView
来伪造边框。
答案 3 :(得分: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;
答案 4 :(得分:0)
您可以使用此扩展名插入两个不同宽度的层:
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)
输出类似于下图,带有外部白色边框和内部黑色边框: