2014-12-03 160 views
1

我一直在嘗試使用非方形圖像完美地塑造圓形圖像。我試着用圓角圖像

[self.photoView.layer setCornerRadius:50.0f]; 
[self.photoView.layer setMasksToBounds:YES]; 

使它變成這樣的:

Not so perfectly rounded

我想讓它充滿完美的圓形。

PhotoView的內容模式設置爲Aspect Fill,它的高度和寬度固定爲80x80並帶有自動佈局。我無法弄清楚。

我做了裁剪和縮放它們的圓形圖像,但也想添加一個邊框,這樣我需要重新創建新的uiimage以在其中繪製邊框。這是很昂貴的事情。我想使用photoView的圖層來做到這一點。

任何幫助表示讚賞。

回答

4

您必須設置圓角半徑爲width/height的一半(僅適用於方形對象),因此它將創建圓視圖。

[self.photoView.layer setCornerRadius:self.photoView.frame.size.height/2]; 

或將其設置爲40.0f,因爲您的高度和寬度爲40x40。

+0

正如我所說的,我獲取用戶的Facebook個人資料圖片。它的大小並不總是正方形。我的圖片視圖的內容模式是Aspect Fill。該解決方案提供完美的鑽石:))https://www.dropbox.com/s/qw7mt2lru22khwi/Screenshot%202014-12-03%2011.31.12.png?dl=0 – taskiner 2014-12-03 09:31:52

+0

@taskiner你可以告訴你如何裁剪和縮放圖像? – 2014-12-03 09:38:28

+0

將cornerRadius設置爲'40.0f'完成了這個訣竅。我不知道爲什麼使用'frame.size.height'設置它會產生尷尬的結果。但是,謝謝,我認爲將它設置爲'40.0f'未來不會產生任何錯誤,因爲它的幀總是80x80,並且我自動佈局對不對? – taskiner 2014-12-03 09:41:01

1

試試這個 導入QuartzCore #import <QuartzCore/QuartzCore.h>標題並使用UIImageView的圖層屬性進行播放。

self.photoView.layer.cornerRadius = self.photoView.frame.size.height/2; 
self.photoView.clipsToBounds = YES; 
+0

正如我所說,照片視圖的圖像是動態加載的,所以它們並不總是平方的。有了這個解決方案,photoView的圖層就像這樣:https://www.dropbox.com/s/qw7mt2lru22khwi/Screenshot%202014-12-03%2011.31.12.png?dl=0 – taskiner 2014-12-03 09:33:51

4
嘗試

這個代碼,拐角半徑應一半提供照片視圖的widthheight的並且它必須是正方形。

因此,代碼是這樣的:

[self.photoView.layer setCornerRadius:CGRectGetHeight(self.photoView.frame)/2]; 
[self.photoView.layer setMasksToBounds:YES]; 
1

您可以通過使用層和麪具實現這一目標:

CGFloat imWidth = photoView.frame.size.width; 
CGFloat imHeight = photoView.frame.size.height; 
CGFloat minSize = imWidth < imHeight ? imWidth : imHeight; 
CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
maskLayer.frame = CGRectMake(imWidth * 0.5f - minSize * 0.5f, imHeight * 0.5f - minSize * 0.5f, minSize, minSize); 
maskLayer.path = CGPathCreateWithEllipseInRect(CGRectMake(0, 0, minSize, minSize), nil); 
photoView.layer.mask = maskLayer; 

這種作物根據photoview.frame內圓的PhotoView。 如果您需要其他效果,您可以將minSize更改爲:CGFloat maxSize = imWidth > imHeight ? imWidth : imHeight;

1

嘗試這個代碼,

SWIFT代碼:

申報

@IBOutlet weak var circleView: UIView! 

viewDidLoad中或任何方法:

circleView.layer.cornerRadius = circleView.frame.width/2 
circleView.layer.borderWidth = 10 
circleView.layer.borderColor = UIColor.blackColor().CGColor 

Objective-C代碼:

聲明UII mageView

@property (weak, nonatomic) IBOutlet UIImageView *myimageview; 

viewDidLoad中或任何方法,

myimageview.layer.cornerRadius = myimageview.frame.size.width/2; 
myimageview.layer.masksToBounds = YES; 
myimageview.layer.borderWidth = 2.0; 
myimageview.layer.borderColor = [UIColor blackColor].CGColor;