CALayer内边框圆角半径

Posted

技术标签:

【中文标题】CALayer内边框圆角半径【英文标题】:CALayer inner border corner radius 【发布时间】:2013-11-28 05:19:21 【问题描述】:

我有一个 UITextView,我在它的图层上设置了边框宽度、边框颜色和角半径属性,外面看起来很棒。但是,边框的内部没有像外部那样的圆角,看起来有点滑稽。有没有办法使边框的内角变圆?

编辑: 这是我在initWithFrame: 方法中使用的代码:

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        self.backgroundColor = UIColorFromRGB(0xdedede);
        self.layer.cornerRadius = kTextFieldCornerRadius;
        self.layer.borderColor = UIColorFromRGB(0xD4974C).CGColor;
        self.layer.borderWidth = 3.0f;
        self.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f];
        [self setClipsToBounds:YES];
        [self.layer setMasksToBounds:YES];
    
    return self;

下面是它现在的截图:

请注意,外角按预期是圆角的,但边框的内角是尖的而不是圆角的。这就是我要解决的问题。感谢您的帮助!

【问题讨论】:

请显示您的代码和文本视图的快照 【参考方案1】:

尝试设置这个,

[txtView       setClipsToBounds:YES]; //Confirms subviews are confined to the bounds of the view
[txtView.layer setMasksToBounds:YES]; //Confirms sublayers are clipped to the layer’s bounds

编辑

在您的情况下,kTextFieldCornerRadius 的值可能设置为低。

如果我设置kTextFieldCornerRadius = 7; 看到我可以得到完美的输出。

尝试增加你的半径值。

【讨论】:

我已经导入了 QuartzCore,并尝试改变圆角半径,它成功了!谢谢!【参考方案2】:

导入QuartzCore框架并添加以下代码行:

目标 - C

UIView *yourView=[[UIView alloc]initWithFrame:CGRectMake(0, 50, 320, 430)];
yourView.layer.borderColor = [UIColor redColor].CGColor;
yourView.layer.borderWidth = 10.0f;
yourView.layer.cornerRadius = 20.0f;

[yourView setClipsToBounds:YES];
[yourView.layer setMasksToBounds:YES];

SWIFT - 3.0.1(操场代码)

//: Playground - noun: a place where people can play

 import UIKit
 import PlaygroundSupport
 import QuartzCore

let containerView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 375.0, height: 100.0))

containerView.backgroundColor = UIColor.white
containerView.layer.borderWidth = 10
containerView.layer.borderColor = UIColor.red.cgColor
containerView.clipsToBounds = true
containerView.layer.masksToBounds = true
containerView.layer.cornerRadius = 20

 PlaygroundPage.current.liveView = containerView
 PlaygroundPage.current.needsIndefiniteExecution = true

输出:

重要提示:

确保 cornerRadius 大于 borderWidth 。否则您将无法看到差异。

【讨论】:

以上是关于CALayer内边框圆角半径的主要内容,如果未能解决你的问题,请参考以下文章

CALayer

UITableViewCell如何添加带圆角的实心边框

CALayer

CALayer:在图层内容上维护cornerRadius

ios CALayer之图片剪切2

CALayer动画