2011-10-17 48 views
1

我想有一個UIImageView的出現圓角,發現下面的代碼做的堆棧溢出:的Xcode的UIImageView圓角不起作用

loginImage = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"BlueSky.jpg"]]; 
CALayer *l = [loginImage layer]; 
[l setMasksToBounds:YES]; 
[l setCornerRadius:5.0]; 

[loginImage release]; 

我將此代碼添加到我的viewDidLoad方法,但不幸的是,UIImageView並沒有給我我期待的圓角。我在Interface Builder中正確鏈接了imageview「loginImage」。

任何想法我在做什麼錯在這裏? 謝謝!

+0

怪異,但嘗試並[setCornerRadius:5.0F]。您的項目是否包含重要的框架,如 0xDE4E15B

+0

謝謝,我試過了,但不幸的是它沒有工作......我也沒有得到任何錯誤信息,當查看加載...是的,它包括所需的框架.. – Trace

+0

好吧,如果這裏的代碼是完整的,程序如何知道這是子視圖?你應該添加這樣的東西 loginImage.layer = l;甚至避免製造額外的物體; [loginImage.layer setMasksToBounds:YES]; [loginImage.layer setCornerRadius:5.0f]; – 0xDE4E15B

回答

1

如果使用Interface Builder創建您的UIImageView,您實際上不需要在代碼中手動創建它。
所以,如果你用IB創建你的UIImageView,代碼應該看起來像這樣。

CALayer *l = [loginImage layer]; 
[l setMasksToBounds:YES]; 
[l setCornerRadius:5.0]; 
loginImage.layer = l; 

此外,對於初學者是很好的閱讀memory management

+0

好的,現在我明白了你的觀點,我會接受你的回答。我其實是:CALayer * l = loginImage.layer;在一行中。我想這是有效的?如果我手動爲其分配內存,我不應該發佈loginImage嗎?我讀了關於內存管理的課程,它實際上是從我學到的... – Trace

+0

當你不需要它們時,你應該釋放你的對象。例如,這通常在 - (void)dealloc中進行;方法。所以,如果你需要你的loginImage,你不需要釋放它。 – 0xDE4E15B

+0

with line CALayer * l = loginImage.layer;你把你的loginImage.layer等同於l,反之亦然。 – 0xDE4E15B

0
-(UIImage *)makeRoundedImage:(UIImage *) image 
         radius: (float) radius; 
{ 
    CALayer *imageLayer = [CALayer layer]; 
    imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height); 
    imageLayer.contents = (id) image.CGImage; 

    imageLayer.masksToBounds = YES; 
    imageLayer.cornerRadius = radius; 

    UIGraphicsBeginImageContext(image.size); 
    [imageLayer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return roundedImage; 
}