UITextField con radio de esquina solo en la parte superior o inferior

Tengo un UITextField que se agrega a una vista y estoy intentando cambiar su apariencia pnetworkingeterminada.

Lo que quiero es cambiar el radio de la esquina, pero solo en la parte superior / inferior. Lo estoy haciendo haciendo esto:

 UIBezierPath *usernameMaskPathWithRadiusTop = [UIBezierPath bezierPathWithRoundedRect:username.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) cornerRadii:CGSizeMake(4.0, 4.0)]; UIBezierPath *passwordMaskPathWithRadiusBottom = [UIBezierPath bezierPathWithRoundedRect:password.bounds byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(4.0, 4.0)]; CAShapeLayer *usernameMaskLayer = [[CAShapeLayer alloc] init]; usernameMaskLayer.frame = username.bounds; usernameMaskLayer.path = usernameMaskPathWithRadiusTop.CGPath; CAShapeLayer *passwordMaskLayer = [[CAShapeLayer alloc] init]; passwordMaskLayer.frame = password.bounds; passwordMaskLayer.path = passwordMaskPathWithRadiusBottom.CGPath; [username setTextAlignment:NSTextAlignmentLeft]; [username setClearButtonMode:UITextFieldViewModeWhileEditing]; usernameLayer.shadowOpacity = 0.0; [usernameLayer setMask:usernameMaskLayer]; [password setTextAlignment:NSTextAlignmentLeft]; [username setClearButtonMode:UITextFieldViewModeWhileEditing]; passwordLayer.shadowOpacity = 0.0; [passwordLayer setMask:passwordMaskLayer]; 

Cuando el UITextField *username UITextField *password y el CAShapeLayer *usernameLayer = username.layer y CAShapeLayer *passwordLayer = password.layer se definen como se describe.

El problema es que después de realizar esto, no obtengo campos, en realidad están allí, pero todo es transparente, text y color de background. No estoy seguro de cómo recuperar eso o cómo arreglar lo que estoy haciendo mal.

¿Cómo puedo exactamente hacer lo que estoy intentando?

Parece que lo que tuve que hacer es, en lugar de establecer una máscara que tuve que agregar como subcapa:

 [username.layer addSublayer:usernameMaskLayer]; // instead of the old [usernameLayer setMask:usernameMaskLayer]; 

Y luego, para configurar un background, tuve que establecer setFillColor en el usernameMaskLayer setFillColor .