首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UIView周围的虚线边框

UIView周围的虚线边框
EN

Stack Overflow用户
提问于 2012-12-03 16:58:33
回答 16查看 106K关注 0票数 171

如何在UIView周围添加虚线边框。

像这样的东西

EN

回答 16

Stack Overflow用户

发布于 2013-03-07 07:49:42

如果你喜欢子层,另一种方法。在你的自定义视图的init中,放入这个(_border是一个ivar):

_border = [CAShapeLayer layer];
_border.strokeColor = [UIColor colorWithRed:67/255.0f green:37/255.0f blue:83/255.0f alpha:1].CGColor;
_border.fillColor = nil;
_border.lineDashPattern = @[@4, @2];
[self.layer addSublayer:_border];

在您的布局子视图中,放入以下内容:

_border.path = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;
_border.frame = self.bounds;
票数 275
EN

Stack Overflow用户

发布于 2015-03-06 07:04:33

对于那些在Swift工作的人来说,UIView上的这个类扩展让它变得很容易。这是基于sunshineDev的回答。

extension UIView {
  func addDashedBorder() {
    let color = UIColor.red.cgColor

    let shapeLayer:CAShapeLayer = CAShapeLayer()
    let frameSize = self.frame.size
    let shapeRect = CGRect(x: 0, y: 0, width: frameSize.width, height: frameSize.height)

    shapeLayer.bounds = shapeRect
    shapeLayer.position = CGPoint(x: frameSize.width/2, y: frameSize.height/2)
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.strokeColor = color
    shapeLayer.lineWidth = 2
    shapeLayer.lineJoin = CAShapeLayerLineJoin.round
    shapeLayer.lineDashPattern = [6,3]
    shapeLayer.path = UIBezierPath(roundedRect: shapeRect, cornerRadius: 5).cgPath

    self.layer.addSublayer(shapeLayer)
    }
}

要使用它:

anyView.addDashedBorder()
票数 78
EN

Stack Overflow用户

发布于 2013-02-05 08:47:37

根据Prasad G的建议,我在UIImage Extras类中创建了一个方法,其中包含以下内容:

- (CAShapeLayer *) addDashedBorderWithColor: (CGColorRef) color {
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];

    CGSize frameSize = self.size;

    CGRect shapeRect = CGRectMake(0.0f, 0.0f, frameSize.width, frameSize.height);
    [shapeLayer setBounds:shapeRect];
    [shapeLayer setPosition:CGPointMake( frameSize.width/2,frameSize.height/2)];

    [shapeLayer setFillColor:[[UIColor clearColor] CGColor]];
    [shapeLayer setStrokeColor:color];
    [shapeLayer setLineWidth:5.0f];
    [shapeLayer setLineJoin:kCALineJoinRound];
    [shapeLayer setLineDashPattern:
     [NSArray arrayWithObjects:[NSNumber numberWithInt:10],
      [NSNumber numberWithInt:5],
      nil]];
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:shapeRect cornerRadius:15.0];
    [shapeLayer setPath:path.CGPath];

    return shapeLayer;
}

需要指出的是,如果您将形状的位置定义为(0,0),边框的下角将放置在图像的中心,这就是我将其设置为:(frameSize.width/2,frameSize.height/2)的原因。

然后,我使用我的方法通过UIImageView的UIImage获取虚线边框,并将CAShapeLayer添加为UIImageView层的子层:

[myImageView.layer addSublayer:[myImageView.image addDashedBorderWithColor:[[UIColor whiteColor] CGColor]]];
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13679923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档