2014-06-10 56 views
0

我想通過繼承UIImageView類來創建自定義類RoundedImageView。UIImageView子類

爲了使其圓,我使用下面的代碼:

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

應該在哪裏我把這個代碼?在初始化程序中?或者可能在layoutSubviews?我知道在初始化器中從自己訪問屬性並不是一個好主意(因爲自我可能沒有完全初始化),這就是爲什麼我很困惑,而且我不確定該代碼的位置。

回答

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

1

初始化方法絕對是正確的地方,因爲您只想設置一次這些屬性。

關於與訪問屬性相關的問題,其思想是可以在派生類中重寫屬性訪問器,從而訪問部分對象尚未正確初始化。在你的情況下,這不是一個非常值得關注的問題,我想說,除非你打算用一些不完全合理的方式來取代layer的吸氣劑。

相關問題