2016-03-23 61 views
1

我爲我的ImageView設置了邊框白色和半徑。但是在ImageView的四角出現了一些黑線。
這裏是我的代碼設置顏色爲我ImageViewIOS:UIImageView帶有半徑的白色邊框在四角顯示一條奇怪的黑線

self.image.layer.cornerRadius = 10; 
self.image.layer.borderWidth = 3; 
self.image.layer.borderColor = [[UIColor whiteColor] CGColor]; 
self.image.layer.masksToBounds = YES; 

這是一個小型示範項目。我的故事板只包含ImageView,我沒有爲我的ImageView設置任何約束。

我不知道爲什麼會這樣,它已經在模擬器和真實設備測試,但它給出一個相同的錯誤

這裏是演示項目:(這很簡單)https://drive.google.com/file/d/0B_poNaia6t8kT0JLSFJleGxEcmc/view?usp=sharing

更新
有些人給出的解決方案是將邊框顏色的顏色從whiteColor更改爲clearColor。當然這會使4條線消失。但是如果我使用clearColor,我不需要爲我的ImageView添加邊框。
我需要邊框白色出於某種原因

enter image description here

+0

你添加的self.image任何子視圖 –

+0

沒有,我只是把它拖到我mainStoryboard –

+0

@ Anbu.Karthik我有添加一個示範項目,如果你不介意的話,您可以檢查它 –

回答

4

更新代碼

我想你的代碼實際上你的圖像大小爲最初大我調整基於原始圖像尺寸

UIImage *myIcon = [self imageWithImage:[UIImage imageNamed:@"abc.jpg"] scaledToSize:CGSizeMake(400, 400)]; 
self.image.image = myIcon; 

有時圓角半徑不能正常工作,所以我用UIBezierPath圖像對於這個概念

UIBezierPath *maskPath; 
maskPath = [UIBezierPath bezierPathWithRoundedRect:self.image.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)]; 

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; 
maskLayer.frame = self.view.bounds; 
maskLayer.path = maskPath.CGPath; 
self.image.layer.mask = maskLayer; 

對於邊框的顏色和寬度使用此

迅速3

let maskPath = UIBezierPath(roundedRect: imageView.bounds, byRoundingCorners: ([.topLeft, .topRight, .bottomLeft, .bottomRight]), cornerRadii: CGSize(width: 10.0, height: 10.0)) 


    let borderShape = CAShapeLayer() 
    borderShape.frame = self.imageView.bounds 
    borderShape.path = maskPath.cgPath 
    borderShape.strokeColor = UIColor.white.cgColor 
    borderShape.fillColor = nil 
    borderShape.lineWidth = 3 
    self.imageView.layer.addSublayer(borderShape) 

輸出

enter image description here

更新

CAShapeLayer* borderShape = [CAShapeLayer layer]; 
borderShape.frame = self.image.bounds; 
borderShape.path = maskPath.CGPath; 
borderShape.strokeColor = [UIColor whiteColor].CGColor; 
borderShape.fillColor = nil; 
borderShape.lineWidth = 3; 
[self.image.layer addSublayer:borderShape]; 

斯威夫特

var borderShape: CAShapeLayer = CAShapeLayer.layer 
borderShape.frame = self.image.bounds 
borderShape.path = maskPath.CGPath 
borderShape.strokeColor = UIColor.whiteColor().CGColor 
borderShape.fillColor = nil 
borderShape.lineWidth = 3 
self.image.layer.addSublayer(borderShape) 

輸出

enter image description here

代碼whole project

+0

謝謝你,但是你忘記了我的邊框3px與'whiteColor'。你可以加入這個代碼。我已經添加它在我的代碼,但它不't顯示正確 –

+0

感謝兄弟,它工作得很好 –

+0

@ Anbu.Karthik超級兄弟 –

0

嘗試剪輯範圍:

self.image.clipToBounds = YES 
+0

即無法使用。 4暗線仍然可見 –

0

我想這個功能寫在imageview的類別:

- (void)setBorderWithRounCornersWithColor:(UIColor *)color{ 

    self.layer.cornerRadius = 5.0f; 
    self.layer.masksToBounds = YES; 

    if(color){ 

     self.layer.borderColor=color.CGColor; 
     self.layer.borderWidth=1.0f; 
    } 

} 

在使用的時候:

[self.imageView setBorderWithRounCornersWithColor:nil]; 
+0

它不工作。 4條暗線依然可見。如果你不介意,請檢查我的演示項目(我已經包括在這個問題中) –

0

當您添加圖像邊界線內添加在和邊界,當你設置圓角的邊框那個時候你的圓角有一定的透明部分,使部分將在角落裏側顯示 只是改變邊框顏色的顏色

image1.layer.cornerRadius = 10; 
image1.layer.borderWidth = 3; 
image1.layer.borderColor = [[UIColor whiteColor] CGColor]; 
image1.layer.masksToBounds = YES; 


image2.layer.cornerRadius = 10; 
image2.layer.borderWidth = 3; 
image2.layer.borderColor = [[UIColor clearColor] CGColor]; 
image2.layer.masksToBounds = YES; 

Check my image one has a white border color and one is clear color

+0

我需要一個白色的邊框,而不是'clearColor' 如果你不介意的話,請檢查我的演示項目我已經包括在這個問題中) –

0

我檢查你的代碼,你可以改變這一行的工作對我來說

self.image.layer。borderColor = [[UIColor clearColor] CGColor];

+0

如果我將邊框的顏色設置爲clearColor,比我不需要將邊框添加到我的ImageView中 –

+0

那麼你必須設置邊框寬度爲0 – Birendra

+0

:(對不起,我的壞解釋,但在我的情況下,它需要一個'whiteColor'的邊框而不是'clearColor' –

1

其實你必須使用兩層。

self.image.clipsToBounds = YES; 
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.image.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(48, 48)]; 
CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
maskLayer.frame = self.image.bounds; 
maskLayer.path = maskPath.CGPath; 
maskLayer.strokeColor = [UIColor redColor].CGColor; 

self.image.layer.mask = maskLayer; 

CAShapeLayer* frameLayer = [CAShapeLayer layer]; 
frameLayer.frame = self.image.bounds; 
frameLayer.path = maskPath.CGPath; 
frameLayer.strokeColor = [UIColor whiteColor].CGColor; 
frameLayer.fillColor = nil; 
frameLayer.lineWidth = 20; 
[self.image.layer addSublayer:frameLayer]; 
+0

謝謝,它真的很有幫助 –