Dashed line border around UIView Dashed line border around UIView objective-c objective-c

Dashed line border around UIView


Another method if you like sublayers. In your custom view's init, put this (_border is an 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];

And in your layoutsubviews, put this:

_border.path = [UIBezierPath bezierPathWithRect:self.bounds].CGPath;_border.frame = self.bounds;


You can set the border with this pattern using Layer and Bezier path like below examples.

Objective-C

CAShapeLayer *yourViewBorder = [CAShapeLayer layer];yourViewBorder.strokeColor = [UIColor blackColor].CGColor;yourViewBorder.fillColor = nil;yourViewBorder.lineDashPattern = @[@2, @2];yourViewBorder.frame = yourView.bounds;yourViewBorder.path = [UIBezierPath bezierPathWithRect:yourView.bounds].CGPath;[yourView.layer addSublayer:yourViewBorder];

Swift 3.1

var yourViewBorder = CAShapeLayer()yourViewBorder.strokeColor = UIColor.black.cgColoryourViewBorder.lineDashPattern = [2, 2]yourViewBorder.frame = yourView.boundsyourViewBorder.fillColor = nilyourViewBorder.path = UIBezierPath(rect: yourView.bounds).cgPathyourView.layer.addSublayer(yourViewBorder)

You can also set different types of design using pattern image like below example.

[yourView.layer setBorderWidth:5.0];[yourView.layer setBorderColor:[[UIColor colorWithPatternImage:[UIImage imageNamed:@"DotedImage.png"]] CGColor]];///just add image name and create image with dashed or doted drawing and add here

Here you've to add <QuartzCore/QuartzCore> framework in the project and import it with below line in YourViewController.m file.

#import <QuartzCore/QuartzCore.h>


For those of you working in Swift, this class extension on UIView makes it easy. This was based on sunshineDev's answer.

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

To use it:

anyView.addDashedBorder()