如何创建一个循环的UIImageView

问题描述 投票:1回答:3

我有问题创建一个圆形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
  }

}
ios swift uiimageview
3个回答
2
投票

覆盖此功能。

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

1
投票

您也可以为它进行基础处理;喜欢

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
}()

注意:Rushabh给出的答案也是正确的。


0
投票

您可以创建此扩展程序

extension UIImageView {

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

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

icon.setRounded()
© www.soinside.com 2019 - 2024. All rights reserved.