Dibujar un rectángulo en UIView

Estoy intentando dibujar un rectángulo transparente en mi UIView que tiene un borde negro.

Sin embargo, mi código crea un rectángulo completamente negro. Aquí está mi código hasta ahora:

- (void)drawRect:(CGRect)rect { // Drawing code CGRect rectangle = CGRectMake(0, 100, 320, 100); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.5); CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.5); CGContextFillRect(context, rectangle); } 

 - (void)drawRect:(CGRect)rect { // Drawing code CGRect rectangle = CGRectMake(0, 100, 320, 100); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.0); //this is the transparent color CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.5); CGContextFillRect(context, rectangle); CGContextStrokeRect(context, rectangle); //this will draw the border } 

el efecto es así (backgroundColor es azul)

introduzca la descripción de la imagen aquí

Proporcionará el rectángulo / cuadrado ajustando los valores de UIView (vista personalizada o subclass de cualquier class que se henetworkinga de UIView ) con transparencia.

 [self.layer setBorderWidth:1.0]; [self.layer setBorderColor:[[UIColor colorWithRed:0.10 green:0.45 blue:0.73 alpha:1.0] CGColor]]; [self.layer setCornerRadius:2.0]; [self.layer setShadowOffset:CGSizeMake(-2, -2)]; [self.layer setShadowColor:[[UIColor lightGrayColor] CGColor]]; [self.layer setShadowOpacity:0.5]; 

Un consejo útil …

Muy a menudo, cuando necesitas dibujar un cuadrado

es más fácil simplemente dibujar una 'banda gruesa' …..

  let context = UIGraphicsGetCurrentContext() context!.setLineWidth(100) context!.setStrokeColor(blah.cgColor) context?.move(to: CGPoint(x: 500, y: 200)) context?.addLine(to: CGPoint(x: 500, y: 300)) context!.strokePath() 

Eso dibujará un cuadrado, que corre hacia abajo de 200 a 300.

Está centrado en 500 de ancho y tiene 100 de ancho.

 CGRect bounds = connectorRect; CGFloat minx = CGRectGetMinX(bounds), midx = CGRectGetMidX(bounds), maxx = CGRectGetMaxX(bounds); CGFloat miny = CGRectGetMinY(bounds), maxy = CGRectGetMaxY(bounds); CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor); CGContextSetLineWidth(context, 1.0); CGContextBeginPath(context); CGContextSetStrokeColorWithColor(context,[UIColor clearColor].CGColor); CGContextMoveToPoint(context, minx, maxy); CGContextAddLineToPoint(context, midx, miny); CGContextAddLineToPoint(context, maxx, maxy); CGContextClosePath(context); CGContextDrawPath(context, kCGPathFillStroke); 

Su código no requiere la llamada CGContextSetRGBFillColor y falta la llamada CGContextStrokeRect . Con Swift 3, su draw(_:) final draw(_:) implementación debería verse así:

 class CustomView: UIView { override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .white } requinetworking init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ rect: CGRect) { guard let ctx = UIGraphicsGetCurrentContext() else { return } ctx.setStrokeColor(networking: 0, green: 0, blue: 0, alpha: 0.5) let rectangle = CGRect(x: 0, y: 100, width: 320, height: 100) ctx.stroke(rectangle) } } 

Como alternativa, si realmente quieres llamar a CGContextSetRGBFillColor , también tienes la llamada CGContextFillRect . Su implementación final draw(_:) se vería así con Swift 3:

 class CustomView: UIView { override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .white } requinetworking init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ rect: CGRect) { guard let ctx = UIGraphicsGetCurrentContext() else { return } ctx.setFillColor(networking: 1, green: 1, blue: 1, alpha: 0) ctx.setStrokeColor(networking: 0, green: 0, blue: 0, alpha: 0.5) let rectangle = CGRect(x: 0, y: 100, width: 320, height: 100) ctx.fill(rectangle) ctx.stroke(rectangle) } }