drawRect con esquinas networkingondeadas

Tengo este código para UIVIew :

 override func drawRect(rect: CGRect) { let toolbarSize = CGFloat(UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 0 : 54) let width = CGRectGetWidth(self.frame) let height = CGRectGetHeight(self.frame) - toolbarSize let heightSpan = floor(height / 2 - self.cropSize.height / 2) let widthSpan = floor(width / 2 - self.cropSize.width / 2) // fill outer rect UIColor(networking: 0, green: 0, blue: 0, alpha: 0.5).set() UIRectFill(self.bounds) // fill inner border UIColor(networking: 1, green: 1, blue: 1, alpha: 0.5).set() UIRectFrame(CGRectMake(widthSpan - 2, heightSpan - 2, self.cropSize.width + 4, self.cropSize.height + 4)) // fill inner rect UIColor.clearColor().set() UIRectFill(CGRectMake(widthSpan, heightSpan, self.cropSize.width, self.cropSize.height)) } 

Esto dibuja un rectángulo con un borde blanco en mi UIView , quiero agregar un radio de esquina para dibujar un círculo.

¿Es posible hacer esto?

esto funciona bien para mi

  someImageView.layer.borderWidth = 1 someImageView.layer.borderColor = UIColor.blackColor().CGColor someImageView.layer.cornerRadius = someImageView.frame.height/2 someImageView.clipsToBounds = true 

Rect con esquinas networkingondeadas: usa un path.

A less que desee aplicar las esquinas networkingondeadas a la vista completa (más fácil) oa una subcapa (más flexible) utilizando layer.cornerRadius , dibuja roundedRect con un UIBezierPath .
Un rectángulo cuadrado networkingondeado con una cornerRadius de cornerRadius de 1/2 la altura termina siendo un círculo o un disco.

 let path = UIBezierPath(roundedRect: innerRect,cornerRadius: 10) path.fill() 

3 networkingondeados, a su disposition:

 let regular = UIBezierPath(roundedRect: CGRect, cornerRadius: CGFloat) let irregular = UIBezierPath(roundedRect: CGRect, byRoundingCorners: UIRectCorner, cornerRadii: CGSize) let oval = UIBezierPath(ovalInRect: CGRect) 

Use path.stroke() para border, path.fill() para contenido.


Ejemplo en el context drawRect:

 // fill inner rect UIColor.clearColor().set() let innerRect = CGRectMake(widthSpan, heightSpan, self.cropSize.width, self.cropSize.height) // replace UIRectFill(innerRect) by: let path = UIBezierPath(roundedRect: innerRect, cornerRadius: 10) path.fill() 

Inspirado por esta excelente discusión:

 UIBezierPath* path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 100, 100) cornerRadius: 10]; path.lineWidth = 1; [UIColor.clearColor setStroke]; [path stroke]; 

Puedes usar el código en awakeFromNib . El código a continuación funciona bastante bien para mí

 - (void)awakeFromNib { // Initialization code self.authorAvatar.layer.cornerRadius = self.authorAvatar.frame.size.width/2; self.authorAvatar.clipsToBounds = YES; } 

Lo uso en una celda personalizada. También puede usar el mismo código en la vista personalizada.