2016-01-23 15 views
8

通常、次のコードを使用して角を設定します。UIImageViewをアスペクトフィッティングモードの角を丸くして設定する方法

これは、アスペクトフィルでimageViewが設定されている場合に機能します。

しかし、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 
     } 
    } 
} 
関連する問題