2016-01-23 4 views
8

Normalerweise verwende ich den folgenden Code, um abgerundete Ecken festzulegen.So richten Sie UIImageView mit abgerundeten Ecken für den Aspect-Fit-Modus ein

imageView.layer.cornerRadius = 10 

Es funktioniert, wenn die Bildansicht auf Aspect Fill gesetzt ist.

Aber wenn die Bildansicht auf Aspect Fit-Modus eingestellt ist, und das Verhältnis zwischen Bildansicht und Bild sind unterschiedlich. Der Effekt der abgerundeten Ecken kann nicht sagen.

enter image description here

Die Hintergrundfarbe wird auf grün gesetzt für die abgerundeten Ecken zeigt.

Gibt es eine Möglichkeit, 'echtes Bildteil' auf abgerundete Ecken zu setzen.

Vielen Dank im Voraus für Ihre Antworten.

+1

Siehe dieses http://stackoverflow.com/a/30747684/3800154 –

+0

Oder die Bildansicht verkleinern – Wain

Antwort

23

Mit dieser Erweiterung 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

Sie zu passen danken den Code und das Ergebnis für den Austausch. – cowbjt

0

Versuchen Sie, diese Ihnen helfen können:

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

Als erstes müssen Sie die Breite und Höhe auf den gleichen Wert setzen. Dann stellen Sie die Bildeigenschaften wie folgt:

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

Dies ist sehr einfach, die Bildansicht wie dies abzurunden:

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

Aber um die Bildansicht mit einem Bildverhältnis zu runden, muss die Bildansicht für den ScaleAspectFill-Modus eingestellt werden.

+0

Seine Frage war "Wie UIImageView mit abgerundeten Ecken für Aspect-Fit-Modus eingestellt werden" Er fragt nicht nach Skalierung des Bildes – iTarek

3

Swift 3 Version der hilfreichen, akzeptierten Antwort ist hier drüben!

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 
     } 
    } 
} 
Verwandte Themen