UIImageView子类化

时间:2014-06-10 20:58:03

标签: ios objective-c uiimageview

我想通过继承UIImageView类来创建自定义类RoundedImageView。

为了实现它,我使用以下代码:

    self.layer.cornerRadius = self.frame.size.width/2;
    self.layer.masksToBounds = YES;

我应该在哪里放置此代码?在初始化程序中?或者也许在layoutSubviews?我知道在初始化程序中访问self的属性并不是一个好主意(因为self可能没有完全初始化),这就是为什么我感到困惑并且我不确定在何处放置此代码。< / p>

2 个答案:

答案 0 :(得分:1)

初始化方法绝对是正确的位置,因为您只想将这些属性设置一次。

关于与访问属性相关的问题,我们的想法是可以在派生类中重写属性访问器,从而访问尚未正确初始化的对象部分。我想说,除非你打算以一些不太明智的方式覆盖layer的吸气剂,否则这不是你的情况下的一个大问题。

答案 1 :(得分:1)

UIView(或从UIView派生的任何类)的规范初始化看起来像这样

- (void)setup
{
    // do any initialization here
}

- (void)awakeFromNib
{
    [self setup];
}

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

    if (self) 
        [self setup];

    return self;
}

这适用于由故事板创建的视图和以编程方式创建的视图。资料来源:the CS193P videos