如何使用内部阴影创建圆角UITextField
我正在将UITextfield
定制为看起来像UISearchbar
。
我喜欢这样的
self.back_textfield = [[UITextField alloc]initWithFrame:CGRectMake(5, 7, 310, 30)]; [self.back_textfield setBorderStyle:UITextBorderStyleRoundedRect]; self.back_textfield.layer.cornerRadius = 15.0;
但我明白这一点:
正如您所看到的,内部阴影不会跟随边界。
我猜UITextField
上的背景是一个图像,所以它不会跟随你的角半径。
在iOS中创建内部阴影很棘手。 你有2个选择。
1)使用图像作为UITextField
背景
2)以编程方式设置阴影(但它看起来不如选项1吸引人)。
下面是使用@Matt Wilding的解决方案为文本字段设置圆形内部阴影的代码
_textField.layer.cornerRadius = 10.0f; CAShapeLayer* shadowLayer = [CAShapeLayer layer]; [shadowLayer setFrame:_textField.bounds]; // Standard shadow stuff [shadowLayer setShadowColor:[[UIColor colorWithWhite:0 alpha:1] CGColor]]; [shadowLayer setShadowOffset:CGSizeMake(0.0f, 0.0f)]; [shadowLayer setShadowOpacity:1.0f]; [shadowLayer setShadowRadius:4]; // Causes the inner region in this example to NOT be filled. [shadowLayer setFillRule:kCAFillRuleEvenOdd]; // Create the larger rectangle path. CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL, CGRectInset(_textField.bounds, -42, -42)); // Add the inner path so it's subtracted from the outer path. // someInnerPath could be a simple bounds rect, or maybe // a rounded one for some extra fanciness. CGPathRef someInnerPath = [UIBezierPath bezierPathWithRoundedRect:_textField.bounds cornerRadius:10.0f].CGPath; CGPathAddPath(path, NULL, someInnerPath); CGPathCloseSubpath(path); [shadowLayer setPath:path]; CGPathRelease(path); [[_textField layer] addSublayer:shadowLayer]; CAShapeLayer* maskLayer = [CAShapeLayer layer]; [maskLayer setPath:someInnerPath]; [shadowLayer setMask:maskLayer];
别忘了导入
#import
将QuartzCore
FrameWork添加到您的项目中
并将其添加到.m文件中
#import
并使用
self.back_textfield.layer.borderWidth = 1.0f; // set as you per your requirement self.back_textfield.layer.cornerRadius = 5.2f; // set as you per your requirement