如果使用自定义子类替换默认视图,则cornerRadius不起作用

时间:2012-10-20 15:26:38

标签: iphone objective-c ios uiview cornerradius

以下设置:

我有一个popupViewController,它有一个自定义的UIView子类作为其视图,在loadView完成

- (void)loadView
{
    CGRect startingPopupSize = CGRectMake(0.0f, 0.0f, 300.0f, 160.0f);
    _popupView = [[MoviePopupView alloc] initWithFrame:startingPopupSize];
    self.view = _popupView;
}

在这个UIView子类中,我在它的init方法中有以下代码

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        // Initialization code
        self.layer.masksToBounds = YES;
        self.layer.opaque = NO;
        self.clipsToBounds = YES;
        self.backgroundColor = [UIColor whiteColor];
        self.layer.borderWidth = 1.0f;
        self.layer.cornerRadius = 10.0f;
    }
    return self;
}

问题是,cornerRadius对此视图不起作用,但边框被绘制,请参见此处:

no cornerRadius

如果我不使用uiviewcontroller的默认uiview替换此视图,而是将其添加为子视图,则cornerRadius工作正常(我想替换它有几个原因)。

为什么这不起作用的任何想法?


修改

如果我只是将masksToBounds = YES方法中的图层initWithFrame属性移动到它可以使用的drawRect方法。将它移动到viewcontrollers viewDidLoad没有。

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    self.layer.masksToBounds = YES;

}

任何想法为何有效?我认为这不是在这里设置这个属性的正确位置。

1 个答案:

答案 0 :(得分:1)

您应该提出两种观点:

  • 背景视图
  • 文字视图

为背景视图设置所需的文本背景颜色。 对于文本视图,将背景颜色设置为清晰颜色。