我通常使用下面的代码来设置圆角。
imageView.layer.cornerRadius = 10
当imageView设置为Aspect Fill时,它会起作用。但是当imageView设置为Aspect Fit模式时,imageView和图片之间的比例不同。圆角效果将无法告诉。
背景颜色设置为绿色,以显示圆角。有没有办法设置'真实的的形象部分'圆角。提前感谢您的回答。
kkih6yb81#
将此扩展用于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 } } }
vxf3dgd42#
Swift 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 } } }
lokaqttq3#
试试这个可以帮助你:
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 } }
5f0d552i4#
这是转换为Objective-C的公认答案:
@implementation UIImageView(Utils) - (void)roundCornersForAspectFitWithRadius:(CGFloat)cornerRadius { if (self.image) { double boundsScale = self.bounds.size.width / self.bounds.size.height; double imageScale = self.image.size.width / self.image.size.height; CGRect drawingRect = 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; } UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:drawingRect cornerRadius:cornerRadius]; CAShapeLayer *mask = [CAShapeLayer new]; [mask setPath:path.CGPath]; [self.layer setMask:mask]; } } @end
v64noz0r5#
首先需要将宽度和高度设置为相同的值。然后像这样设置图像属性:
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()
b4lqfgs46#
我想评论一下Arun的答案,以帮助那些在执行Arun的方法时遇到问题的人,但是在集合视图中,你必须将imageView的框架初始化为集合视图单元格的框架。即
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "identifier", for: indexPath) as UICollectionViewCell let imageView = UIImageView(frame: cell.frame)
显然你想重构它之类的东西,但你明白了。
kdfy810k7#
如果在项目中使用SDWebImage,可以执行以下操作:myUIImageView.image = myUIImage.sd_roundedCornerImage(withRadius: 24, corners: .allCorners, borderWidth: 0, borderColor: nil)
SDWebImage
myUIImageView.image = myUIImage.sd_roundedCornerImage(withRadius: 24, corners: .allCorners, borderWidth: 0, borderColor: nil)
qmelpv7a8#
这里使用推荐的渲染器UIGraphicsImageRenderer的解决方案:
UIGraphicsImageRenderer
extension UIImageView { func setRoundedCorners(radius: CGFloat) { guard let image = self.image else { fatalError("Set image first") } let imageLayer = CALayer() imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height) imageLayer.contents = image.cgImage imageLayer.masksToBounds = true imageLayer.cornerRadius = radius let renderer = UIGraphicsImageRenderer( bounds: CGRectMake(0, 0, image.size.width, image.size.height), format: UIGraphicsImageRendererFormat(for: traitCollection) ) let roundedImage = renderer.image { action in imageLayer.render(in: action.cgContext) } self.image = roundedImage } }
然后你可以这样做:
let imageView = UIImageView(image: <your image>) imageView. setRoundedCorners(radius: 16)
gijlo24d9#
这是非常简单的四舍五入图像视图如下所示:
self.profileImageView?.clipsToBounds = true self.profileImageView!.layer.cornerRadius = 10 self.profileImageView?.layer.borderWidth = 1.0 self.profileImageView?.contentMode = .ScaleAspectFit
但是为了使图像视图与图像比例成四舍五入,我认为您必须将图像视图设置为ScaleAspectFill模式。
9条答案
按热度按时间kkih6yb81#
将此扩展用于UIImageView:
vxf3dgd42#
Swift 3版本的有用的,接受的答案在这里!
lokaqttq3#
试试这个可以帮助你:
5f0d552i4#
这是转换为Objective-C的公认答案:
v64noz0r5#
首先需要将宽度和高度设置为相同的值。然后像这样设置图像属性:
b4lqfgs46#
我想评论一下Arun的答案,以帮助那些在执行Arun的方法时遇到问题的人,但是在集合视图中,你必须将imageView的框架初始化为集合视图单元格的框架。
即
显然你想重构它之类的东西,但你明白了。
kdfy810k7#
如果在项目中使用
SDWebImage
,可以执行以下操作:myUIImageView.image = myUIImage.sd_roundedCornerImage(withRadius: 24, corners: .allCorners, borderWidth: 0, borderColor: nil)
qmelpv7a8#
这里使用推荐的渲染器
UIGraphicsImageRenderer
的解决方案:然后你可以这样做:
gijlo24d9#
这是非常简单的四舍五入图像视图如下所示:
但是为了使图像视图与图像比例成四舍五入,我认为您必须将图像视图设置为ScaleAspectFill模式。