如何创建循环 UIImageView



我在创建循环UIImageView时遇到问题。如果我手动将corderRadius设置为一个值,例如。50,它将有圆角。但是当我尝试将其设置为框架高度或宽度的一半(frame.width / 2frame.height / 2(时,它不起作用。不知何故,当我尝试打印框架时,框架(0, 0, 0, 0)

这是我的代码,

import UIKit
class TestIconController : UIViewController {
let icon: UIImageView = {
    let imageView = UIImageView()
    imageView.layer.cornerRadius = imageView.frame.width / 2
    imageView.clipsToBounds = true
    imageView.layer.masksToBounds = true
    imageView.backgroundColor = .red
    imageView.translatesAutoresizingMaskIntoConstraints = false
    return imageView
}()
override func viewDidLoad() {
    super.viewDidLoad()
    loadLogo()
}
func loadLogo() {
    view.addSubview(icon)
    // Constraints
    icon.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    icon.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    icon.heightAnchor.constraint(equalToConstant: 200).isActive = true
    icon.widthAnchor.constraint(equalToConstant: 200).isActive = true
  }
}

重写此函数。

override func viewDidLayoutSubviews() {
        icon.layer.cornerRadius = icon.bounds.size.width / 2
        icon.clipsToBounds = true
        icon.layer.masksToBounds = true
    }

您也可以为它创建一个基类来处理面糊;喜欢

class UICirlceImageView : UIImageView {
    override open func layoutSubviews() {
        super.layoutSubviews();
        let layer:CALayer = self.layer;
        layer.cornerRadius = self.frame.size.width/2.0;
        layer.masksToBounds = true;
    }
}

然后,像这样做

//let icon: UICirlceImageView = { // You may initialize like this as well
let icon: UIImageView = {
    let imageView = UICirlceImageView()
    imageView.backgroundColor = .red
    //imageView.translatesAutoresizingMaskIntoConstraints = false // Don't know if it is needed
    return imageView
}()

注:鲁沙布给出的答案也是正确的。

您可以创建此扩展

extension UIImageView {
    func setRounded() {
        self.layer.cornerRadius = self.frame.width / 2
        self.layer.masksToBounds = true
        self.clipsToBounds = true
    }
}

在您的情况下,您可以在 viewDidLayoutSubviews 调用

icon.setRounded()

最新更新