如何使用CGRect(Swift)创建带有圆角的UIImage/-View

69

如何在Swift iOS Playground上创建一个带有圆角的UIImageView?
其内部需要填充颜色。


您还可以将特定的边缘设置为圆角:https://iosdevcenters.blogspot.com/2018/02/how-to-set-roundcorner-radius-on-view.html - Bhadresh
10个回答

191
let imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.backgroundColor = UIColor.redColor()
imageView.layer.cornerRadius = 8.0
imageView.clipsToBounds = true

结果:

enter image description here


1
如果我们想要对UIImage进行舍入而不是UIImageView怎么办? - Arslan Kaleem
如果你将ImageView圆形化,图片将会呈现为圆形。同样的结果。 - Mundi
你能帮我解决这个问题吗?https://stackoverflow.com/q/71648910/15023395 - Arslan Kaleem
@Arslan,如果你想要将UIImage进行圆角处理而不是UIImageView,请查看stackoverflow.com/questions/70252577 - P. Stern

30

对于Swift中的圆形图片框架,对我有效的方法是:

self.profileImageView.image =  UIImage(named:"profileUser")
self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = true

要添加阴影:

self.profileImageView.layer.masksToBounds = NO;
self.profileImageView.layer.cornerRadius = 8;
self.profileImageView.shadowOffset = CGSizeMake(5.0, 5.0);
self.profileImageView.shadowRadius = 5;
self.profileImageView.shadowOpacity = 0.5;

23

试一下这个,对我有用。

self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = true

14

我厌倦了为每个UIView编写设置半径和边框的蒙版。因此,我为UIView创建了以下扩展。应该适用于每个UIView子类,尽管我没有进行测试。当然,可以将扩展缩小到您使用的特定视图。

extension UIView {      
    func setRadius(radius: CGFloat? = nil) {
        self.layer.cornerRadius = radius ?? self.frame.width / 2;
        self.layer.masksToBounds = true;
    }
}
如果您没有传递任何特定值,它将默认为视图的一半宽度。

10

Swift 3.0, 4.0

如果想要使用Storyboard,建议应用此方法并确保“剪切到边界”处于启用状态。

enter image description here


4
如果您想要一个选项来将每个UIImageView都圆角化,你可以将此代码复制到您的项目中,不要忘记勾选剪切至边界并将其值设置为true
import UIKit

@IBDesignable
extension UIImageView
{
    private struct AssociatedKey
    {
        static var rounded = "UIImageView.rounded"
    }

    @IBInspectable var rounded: Bool
    {
        get
        {
            if let rounded = objc_getAssociatedObject(self, &AssociatedKey.rounded) as? Bool
            {
                return rounded
            }
            else
            {
                return false
            }
        }
        set
        {
            objc_setAssociatedObject(self, &AssociatedKey.rounded, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            layer.cornerRadius = CGFloat(newValue ? 1.0 : 0.0)*min(bounds.width, bounds.height)/2
        }
    }
}

screenshot


1
工作完美,谢谢。 - Neo Nguyen
1
你也可以在setter中添加self.clipsToBounds = true,这样就不用担心在界面构建器中设置它了。 - Quinn

2
Swift 5.0:
我的个人偏好是为特定的更改添加额外的Swift文件。我所做的是创建一个类,例如“RoundCorner”,它是我想要更改的元素的子类,在这种情况下是视图元素。然后我覆盖了各个设置。
class RoundCorner: UIView {
override func draw(_ rect: CGRect) {
    self.layer.cornerRadius = 10 // change this number to get the corners you want
    self.layer.masksToBounds = true
    }
}

之后,您只需选择要更改的元素,并将自定义类设置为我们之前创建的类即可。

在此处查看屏幕截图


1
在Swift 4中,你可以很容易地这样做:
yourUIImage.layer.cornerRadius = 10 // Set it how you prefer
yourUIImage.layer.masksToBounds = true

如果您使用一个相当长的矩形图片,例如在您的应用程序或其他地方的特色内容部分,请确保内容模式(Content Mode)设置为缩放以适应(Scale To Fit),否则边角会被某种方式圆化,但会被切断得很丑陋,并不是完美的圆角,而是一个圆角,然后是一个尖锐的剪切。


UIImage没有图层... - erotsppa

1

在“Identity Inspector”中的“User Defined Runtime Attributes”部分设置layer.cornerRadius = 10,即使是像表格单元格这样的可重复元素也可以生效。


0
在你的viewDidLoad方法中添加这行代码。
self.headerImageView.layer.cornerRadius = self.headerImageView.frame.size.width / 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接