我有一个添加到 View 的 UITextField
,我正在尝试更改它的默认外观。
我想要的是改变拐角半径,但仅限于顶部/底部。我正在这样做:
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];
其中 UITextField *username
,UITextField *password
和 CAShapeLayer *usernameLayer = username.layer
和 CAShapeLayer *passwordLayer = password .layer
按照描述定义。
问题是,在执行上述操作后,我根本看不到任何字段,实际上它们在那里,但一切都是透明的,包括文本和背景颜色。我不确定如何取回它或如何解决我做错的任何事情。
我怎样才能正确地做我想做的事?
最佳答案
看来我必须做的不是设置 mask ,而是必须添加为子层:
[username.layer addSublayer:usernameMaskLayer];
// instead of the old
[usernameLayer setMask:usernameMaskLayer];
然后为了设置背景,我只需要在 usernameMaskLayer
上 setFillColor
。
关于ios - 仅在顶部或底部具有圆角半径的 UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910361/