2014-08-30 65 views
34

我想展示的圖片到像圖像接觸的ImageView(一圈),但是當我嘗試證明這一點,該ImageView的重新調整他的大小和這個不轉了一圈正確顯示..如何正確地設置imageView中像imageContacts一樣的圓形?

image.layer.borderWidth=1.0 
image.layer.masksToBounds = false 
image.layer.borderColor = UIColor.whiteColor().CGColor 
image.layer.cornerRadius = image.frame.size.height/2 
image.clipsToBounds = true 

我要顯示這樣的: enter image description here

但我得到這個: enter image description here

如何能做到圖像調整到UIImageView的大小來顯示像圈?

謝謝!

+0

這裏是身高的情況下,解決方案的ImageView有寬度不同:http://stackoverflow.com/questions/29685055/ ios-frame-size-width-2-doesnt-produce-a-circle-on-each-device – lee 2016-08-18 04:29:22

回答

28

什麼frame大小你用於image?如果將框架設置爲正方形,我可以獲得完美的圓形。

let image = UIImageView(frame: CGRectMake(0, 0, 100, 100)) 
+0

我在大小檢查器中的圖像大小設置爲120寬度和120高度,但是當我運行它時,它不是一個完美的因爲寬度變得更長了一圈?爲什麼? – 2016-01-21 19:08:58

+0

如果框架是正方形,將半徑設置爲寬度/高度的一半將始終爲您提供圓形視圖。如果創建的自定義類可能符合各種方框大小,則不能對半徑值進行硬編碼。 – Mahouk 2016-02-27 06:44:20

27

這是解決方案,我在我的應用程序都使用:

var image: UIImage = UIImage(named: "imageName") 
imageView.layer.borderWidth = 1.0 
imageView.layer.masksToBounds = false 
imageView.layer.borderColor = UIColor.whiteColor().CGColor 
imageView.layer.cornerRadius = image.frame.size.width/2 
imageView.clipsToBounds = true 

雨燕4.0

let image = UIImage(named: "imageName") 
imageView.layer.borderWidth = 1.0 
imageView.layer.masksToBounds = false 
imageView.layer.borderColor = UIColor.white.cgColor 
imageView.layer.cornerRadius = image.frame.size.width/2 
imageView.clipsToBounds = true 
+0

您能否爲swift 3做一個更新? – Antonio 2017-04-22 23:22:47

+0

爲什麼這裏的所有答案都如此投票 - 如此投票呢?是不是有點愚蠢的使用cornerRadius有圖像不必是方形? – Injectios 2017-11-09 11:08:24

4

這就是你所需要的....

 profilepic = UIImageView(frame: CGRectMake(0, 0, self.view.bounds.width * 0.19 , self.view.bounds.height * 0.1)) 
     profilepic.layer.borderWidth = 1 
     profilepic.layer.masksToBounds = false 
     profilepic.layer.borderColor = UIColor.blackColor().CGColor 
     profilepic.layer.cornerRadius = profilepic.frame.height/2 
     profilepic.clipsToBounds = true 
     slider.addSubview(profilepic) 
+0

你需要爲此導入'''quartzcore'''嗎? – Supertecnoboff 2015-10-23 13:19:21

+0

@Supertecnoboff nope。! – 2015-11-18 18:43:25

3

我建議讓你的圖像文件成爲一個完美的方塊。這可以在幾乎任何照片編輯程序中完成。之後,這應該在viewDidLoad內工作。感謝這個video

image.layer.cornerRadius = image.frame.size.width/2 
image.clipsToBounds = true 
10

快速簡單解決方案。

如何使用遮罩UIImage使用Swift無需修剪即可。

extension UIImageView { 
    public func maskCircle(anyImage: UIImage) { 
    self.contentMode = UIViewContentMode.ScaleAspectFill 
    self.layer.cornerRadius = self.frame.height/2 
    self.layer.masksToBounds = false 
    self.clipsToBounds = true 

    // make square(* must to make circle), 
    // resize(reduce the kilobyte) and 
    // fix rotation. 
    self.image = anyImage 
    } 
} 

如何撥打:

let anyAvatarImage:UIImage = UIImage(named: "avatar")! 
avatarImageView.maskCircle(anyAvatarImage) 
+1

我找不到'prepareImage()'方法。它被改變了嗎? – Antonio 2017-04-22 23:18:03

+0

@Antonio,這是他的自定義功能...你只是使用self.image = anyImage – 2017-06-08 11:56:56

+0

我刪除了額外的功能。謝謝@BorisNikolić – fatihyildizhan 2017-06-09 12:17:56

0

我固定它做修改視圖:

  1. 轉到您的Main.storyboard
  2. 點擊圖像
  3. 上查看 - >模式 - >方面填充

它完美

0

這項工作非常適合我。 行的順序是重要

func circularImage(photoImageView: UIImageView?) 
{ 
    photoImageView!.layer.frame = CGRectInset(photoImageView!.layer.frame, 0, 0) 
    photoImageView!.layer.borderColor = UIColor.grayColor().CGColor 
    photoImageView!.layer.cornerRadius = photoImageView!.frame.height/2 
    photoImageView!.layer.masksToBounds = false 
    photoImageView!.clipsToBounds = true 
    photoImageView!.layer.borderWidth = 0.5 
    photoImageView!.contentMode = UIViewContentMode.ScaleAspectFill 
} 

如何使用:

@IBOutlet weak var photoImageView: UIImageView! 
    ... 
    ... 
    circularImage(photoImageView) 
0

我發現了什麼是當除以2,您的寬度和圖像視圖的高度必須返回一個偶數得到一個完美的圓如

let image = UIImageView(frame: CGRectMake(0, 0, 120, 120)) 

它不應該是這樣的 讓圖像= UIImageVi ew(frame:CGRectMake(0,0,130,130))

-1
reviewerImage.layer.cornerRadius = reviewerImage.frame.size.width/2; 
reviewerImage.clipsToBounds = true 
0

這也適用於我。要獲得完美的圓形效果,請在寬度和高度上使用相同的尺寸。像image.frame = CGRect(0,0,200, 200)

對於非完美的圓形,寬度和高度不應該像下面的代碼一樣。

image.frame = CGRect(0,0,200, 160) 
image.layer.borderColor = UIColor.whiteColor().CGColor 
image.layer.cornerRadius = image.frame.size.height/2 
image.layer.masksToBounds = false 
image.layer.clipsToBounds = true 
image.contentMode = .scaleAspectFill 
0

我有一個類似的結果(更多的橢圓比圓)。事實證明,我在UIImageView上設置的限制迫使它變成橢圓形而不是圓形。解決之後,上面的解決方案工作。

1

創建您的自定義圓圈UIImageView並在layout下創建圓圈如果您使用Autolayout,則可以幫助您創建圓圈。

/* 
     +-------------+ 
     |    | 
     |    | 
     |    | 
     |    | 
     |    | 
     |    | 
     +-------------+ 
    The IMAGE MUST BE SQUARE 
*/ 
class roundImageView: UIImageView { 

    override init(frame: CGRect) { 
     // 1. setup any properties here 
     // 2. call super.init(frame:) 
     super.init(frame: frame) 
     // 3. Setup view from .xib file 
    } 

    required init?(coder aDecoder: NSCoder) { 
     // 1. setup any properties here 
     // 2. call super.init(coder:) 
     super.init(coder: aDecoder) 
     // 3. Setup view from .xib file 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     self.layer.borderWidth = 1 
     self.layer.masksToBounds = false 
     self.layer.borderColor = UIColor.white.cgColor 
     self.layer.cornerRadius = self.frame.size.width/2 
     self.clipsToBounds = true 
    } 
} 
0

試試這個。 迅速代碼

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    perform(#selector(self.setCircleForImage(_:)), with: pickedImage, afterDelay: 0) 
} 


@objc func setCircleForImage(_ imageView : UIImageView){ 
    imageView.layer.cornerRadius = pickedImage.frame.size.width/2 
    imageView.clipsToBounds = true 
} 
0

使用此代碼,以使圖像一輪

 self.layoutIfNeeded() 
    self.imageView.layer.cornerRadius = 
    self.imageView.frame.width/2 
    self.imageView.layer.masksToBounds = true 
相關問題