2016-01-23 104 views
8

我通常使用下面的代碼來設置圓角。如何設置圓角適合模式的圓角UIImageView

imageView.layer.cornerRadius = 10 

它在imageView設置爲Aspect Fill時起​​作用。

但是當imageView設置爲Aspect Fit模式,並且imageView和圖片之間的比率不同時。 圓角效果將無法辨別。

enter image description here

的背景顏色設置爲綠色用於示出圓角。

是否有任何方法將「真實圖像部分」設置爲圓角。

非常感謝您的回答。

+1

請參閱本http://stackoverflow.com/a/30747684/3800154 –

+0

或調整圖像視圖,以適應 – Wain

回答

23

使用該擴展的UIImageView:

extension UIImageView 
{ 
    func roundCornersForAspectFit(radius: CGFloat) 
    { 
     if let image = self.image { 

      //calculate drawingRect 
      let boundsScale = self.bounds.size.width/self.bounds.size.height 
      let imageScale = image.size.width/image.size.height 

      var drawingRect: CGRect = self.bounds 

      if boundsScale > imageScale { 
       drawingRect.size.width = drawingRect.size.height * imageScale 
       drawingRect.origin.x = (self.bounds.size.width - drawingRect.size.width)/2 
      } else { 
       drawingRect.size.height = drawingRect.size.width/imageScale 
       drawingRect.origin.y = (self.bounds.size.height - drawingRect.size.height)/2 
      } 
      let path = UIBezierPath(roundedRect: drawingRect, cornerRadius: radius) 
      let mask = CAShapeLayer() 
      mask.path = path.cgPath 
      self.layer.mask = mask 
     } 
    } 
} 

Without calling this function

After calling this extension method

+0

感謝您分享代碼和結果。 – cowbjt

0

試試這個可以幫助你:

import UIKit 


class ViewController: UIViewController{ 

    @IBOutlet weak var myImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     myImageView.contentMode = UIViewContentMode.ScaleAspectFit 
     myImageView.clipsToBounds = true 
     //myImageView.layer.cornerRadius = 10.0 
     myImageView.layer.masksToBounds = true 

     let simpleImage = UIImage(named:"ipad5_einladung.jpg") 
     let corneredImage = generateRoundCornerImage(simpleImage!, radius: 10) 

     //Set cornered Image 
     myImageView.image = corneredImage; 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    func generateRoundCornerImage(image : UIImage , radius : CGFloat) -> UIImage { 

     let imageLayer = CALayer() 
     imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height) 
     imageLayer.contents = image.CGImage 
     imageLayer.masksToBounds = true 
     imageLayer.cornerRadius = radius 

     UIGraphicsBeginImageContext(image.size) 
     imageLayer.renderInContext(UIGraphicsGetCurrentContext()) 
     let roundedImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return roundedImage 
    } 

} 
2

首先,您需要的寬度和高度設置爲相同的值。然後設置像這樣的圖像屬性:

imgProfile_Pic.layer.cornerRadius = cell.imgProfile_Pic.frame.size.height/2 
imgProfile_Pic.layer.borderWidth = 3.0 
imgProfile_Pic.layer.borderColor = UIColor.white.cgColor 
imgProfile_Pic.clipsToBounds = true 
imgProfile_Pic.layoutIfNeeded() 
-1

這是非常簡單的圓形攝像畫面是這樣的:

self.profileImageView?.clipsToBounds = true 
self.profileImageView!.layer.cornerRadius = 10 
self.profileImageView?.layer.borderWidth = 1.0 
self.profileImageView?.contentMode = .ScaleAspectFit 

但爲了使圖像視圖與圖像比例四捨五入,我認爲您必須爲ScaleAspectFill模式設置圖像視圖。

+0

他的問題是 「如何設置圓角適合模式的圓角UIImageView」他沒有要求縮放圖像 – iTarek

3

斯威夫特3版的有用的,接受的答案就在這裏!

extension UIImageView { 
func roundCornersForAspectFit(radius: CGFloat) 
{ 
    if let image = self.image { 

     //calculate drawingRect 
     let boundsScale = self.bounds.size.width/self.bounds.size.height 
     let imageScale = image.size.width/image.size.height 

     var drawingRect : CGRect = self.bounds 

     if boundsScale > imageScale { 
      drawingRect.size.width = drawingRect.size.height * imageScale 
      drawingRect.origin.x = (self.bounds.size.width - drawingRect.size.width)/2 
     }else { 
      drawingRect.size.height = drawingRect.size.width/imageScale 
      drawingRect.origin.y = (self.bounds.size.height - drawingRect.size.height)/2 
     } 
     let path = UIBezierPath(roundedRect: drawingRect, cornerRadius: radius) 
     let mask = CAShapeLayer() 
     mask.path = path.cgPath 
     self.layer.mask = mask 
     } 
    } 
}