1

我想在UIImageView上獲得一個不錯的圓角。我發現一個實現了下面的代碼,如果圖像是方形的,它可以正常工作。問題是我的imageView是一張長方形的照片,有時候肖像有時候是風景。這段代碼削減了角點,但是當圖像的一邊比另一邊長時,不能給出平滑的曲線。有任何想法嗎?另外,setCornerRadius中的浮點數應用於圖像作爲邊的百分比還是直線像素數?如何在非方形上獲得光滑的圓角半徑Objective C UIImageView

// Get the Layer of any view 
    CALayer * l = [imageView layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:100.0]; 

這是所有感興趣的修復程序。

好了,在玩了一段時間後,我發現我需要調整imageView的大小以適合圖像。我實現了以下方法來設置幀大小。

- (CGRect)getScaleForFrameFromImage:(UIImage *)image 
{ 
    // get the bigger side of image to determine the shape then 
    // get the percentage we need to scale to to trim imageViewFrame 
    // so it fits image and sits in the space dedicated in main view for the image 
    float percentage; 
    float newWidth; 
    float newHeight; 

    float w = image.size.width; 
    float h = image.size.height; 
    if (w > h) { 
     // landscape 
     percentage = 280/w; 
     newWidth = w * percentage; 
     newHeight = h * percentage;; 
    } 
    else { 
     percentage = 208/h; 
     newWidth = w * percentage; 
     newHeight = h * percentage; 
    } 
    int xOrigin = 20 + (280 - newWidth)/2; 
    CGRect newFrame = CGRectMake(xOrigin, 160, newWidth, newHeight); 
    return newFrame; 
} 

然後在我的viewWillAppear中我這樣做

// set the imageFrame size 
    [imageView setFrame:[self getScaleForFrameFromImage:imageToDisplay]]; 

    // Use that image to put on the screen in imageView 
    [imageView setImage:imageToDisplay]; 

    // Get the Layer of imageView 
    CALayer * l = [imageView layer]; 
    [l setMasksToBounds:YES]; 
    [l setCornerRadius:10.0]; 
+0

你能發表截圖嗎?我認爲cornerRadius屬性在矩形視圖上正常工作。 (這是一個像素計數順便說一句,不是一個百分比。) – 2012-03-22 14:45:15

+0

好吧,所以我正在製作截圖張貼過程中,我想我看到了問題。當我拍了一張肖像東方照片時,我根本沒有找到圓角,但風景正在變得時髦翹曲的角落。我認爲它是因爲我的UIImage視圖的大小足以填充我認爲最大的區域,我希望圖像佔用。它也被設置爲填充IB的方面。我認爲代碼工作正常,只是我的圖像很少填充整個視圖。所以我想我應該看看@是如何調整視圖到當前圖像的大小?建議?我可恥仍然是一個新手;〜) – vichudson1 2012-03-22 14:58:33

回答

2

我的建議是與圖像的尺寸繪製的ImageView,然後應用圓角半徑。

這將是這樣的。

// get the size of the image. 
CGSize *size = yourImage.size; 

// use the size to set the uiimageview frame 
UIImageView * imageView = [UIImageView alloc] initWithFrame:CGRecMake(0,0,size.widht,size.height)]; 
[imageView setImage:yourImage]; 
// 
CALayer * l = [imageView layer]; 
[l setMasksToBounds:YES]; 
[l setCornerRadius:100.0]; 
+0

這實際上是我剛纔意識到的。見上面的評論。 UIImageView是在Navigtion/TableView情況下創建爲詳細視圖的視圖的一部分。我目前在viewView的viewWillAppear中設置了視圖的圖像。我需要一種方法來在運行中調整imageView的大小,而不是在初始化期間。我會看看我能否弄清楚,我會盡快回復你。 ;〜) – vichudson1 2012-03-22 15:04:05

+0

解決。謝謝你的幫助。請參閱主文章中的代碼以獲得修復。 – vichudson1 2012-03-22 16:53:27