Swift – 如何设置imageView的angular点半径

在objective-c这样的行中

self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0f; 

做它的工作,我使用类比在Swift中尝试了它

 self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0 

并没有改变什么,angular落和以前一样。 而且,XCode不显示任何语法错误。 Swift是否支持其他任何方式来实现这个目标? 我在这里检查了一些其他的线程,通常在上面显示的方式在Swift中完成。

图层绘制出剪辑区域,您需要将其设置为遮罩:

 self.mainImageView.layer.masksToBounds = true 

从文档 :

默认情况下,圆angular半径不适用于图层内容属性中的图像; 它只适用于图层的背景颜色和边框。 但是,将masksToBounds属性设置为true会导致内容被裁剪为圆angular

Swift 3.0Xcode8有一个很小的区别

无论何时你想应用angular落半径到UIView,确保在调用cornerRadius之前调用你的yourUIView.layoutIfNeeded()

否则,它将返回UIView的高度和宽度(1000.0)的默认值,这可能会使您的视图消失。

在设置任何图层属性之前,请务必确保所有改变UIView大小的效果(界面构build器约束等)都被应用。

UIView类实现的例子

 class BadgeView: UIView { override func awakeFromNib() { self.layoutIfNeeded() layer.cornerRadius = self.frame.height / 2.0 layer.masksToBounds = true } } 

尝试这个

 self.mainImageView.layer.cornerRadius = CGRectGetWidth(self.mainImageView.frame)/4.0 self.mainImageView.clipsToBounds = true 

在swift中,'CGRectGetWidth'已经被属性'CGRect.width'

  view.layer.cornerRadius = view.frame.width/4.0 view.clipsToBounds = true 

最简单的方法是创build一个UIImageView的子类(我已经尝试过了,它可以在iPhone 7和XCode 8上正常工作):

 class CIRoundedImageView: UIImageView { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func awakeFromNib() { self.layoutIfNeeded() layer.cornerRadius = self.frame.height / 2.0 layer.masksToBounds = true } } 

然后你也可以设置一个边框:

 imageView.layer.borderWidth = 2.0 imageView.layer.borderColor = UIColor.blackColor().CGColor 

在swift中标记为@IBInspectable (或Objective-C中的IBInspectable),可以在Interface Builder的属性检查器面板中轻松进行编辑。
您可以在属性检查器中直接设置borderWidthcornerRadiusborderColor

 extension UIView { @IBInspectable var cornerRadius: CGFloat { get{ return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } @IBInspectable var borderWidth: CGFloat { get { return layer.borderWidth } set { layer.borderWidth = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(cgColor: layer.borderColor!) } set { layer.borderColor = borderColor?.cgColor } } } 

在这里输入图像说明

Swift3 —– XCode-8 —– iOS10

 DispatchQueue.main.async { self.mainImageView.layer.cornerRadius = self.mainImageView.bounds.size.width / 2.0 self.mainImageView.clipsToBounds = true } 

您可以定义任何提供“用户定义的运行时属性”的视图的边界半径,提供stringtypes的关键path“layer.cornerRadius”,然后提供您需要的半径值;)请参阅下面的附加图像:

在XCode中配置

结果在模拟器中