如何在 swift 中设置圆形图像

How to set image in circle in swift

如何用 swift 圈出图片?

我的 ViewController :

import UIKit
import Foundation

class FriendsViewController : UIViewController{

    @IBOutlet weak var profilPicture: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))
    }
}

我的profilPicture = UIImageView(frame: CGRectMake(0, 0, 100, 100))什么都不做..

示例:http://www.appcoda.com/ios-programming-circular-image-calayer/

如果你想在 Swift 中制作一个 UIImageView 循环,你可以使用此代码:

imageView.layer.cornerRadius = imageView.frame.height / 2
imageView.clipsToBounds = true
import UIKit

class ViewController: UIViewController {
  @IBOutlet weak var image: UIImageView!

  override func viewDidLoad() {
    super.viewDidLoad()

    image.layer.borderWidth = 1
    image.layer.masksToBounds = false
    image.layer.borderColor = UIColor.black.cgColor
    image.layer.cornerRadius = image.frame.height/2
    image.clipsToBounds = true
}

如果你想在分机上使用它

import UIKit

extension UIImageView {

    func makeRounded() {

        self.layer.borderWidth = 1
        self.layer.masksToBounds = false
        self.layer.borderColor = UIColor.black.cgColor
        self.layer.cornerRadius = self.frame.height / 2
        self.clipsToBounds = true
    }
}

这就是你所需要的......

不知道这是否对任何人有帮助,但我在这个问题上苦苦挣扎了一段时间,none 在线答案对我有所帮助。对我来说,问题是我在情节提要中的图像上设置了不同的高度和宽度。我尝试了堆栈上的每个解决方案,结果证明它就是这么简单。一旦我将它们都设置为 200,我的圆形个人资料图像就完美了。这是当时在我的 VC.

中的代码
profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2
    profileImage2.clipsToBounds = true

首先你需要设置等宽和等高才能得到圆形ImageView.Below我设置的宽和高是100,100.If你想根据你需要的尺寸设置等宽和等高,设置这里。

 var imageCircle = UIImageView(frame: CGRectMake(0, 0, 100, 100))

然后你需要设置 height/2 为圆角半径

 imageCircle.layer.cornerRadius = imageCircle.frame.size.height/2
 imageCircle.layer.borderWidth = 1
 imageCircle.layer.borderColor = UIColor.blueColor().CGColor
 imageCircle.clipsToBounds = true
 self.view.addSubview(imageCircle)

您可以简单地创建扩展:

import UIKit

extension UIImageView {

   func setRounded() {
      let radius = CGRectGetWidth(self.frame) / 2
      self.layer.cornerRadius = radius
      self.layer.masksToBounds = true
   }
}

并按如下方式使用它:

imageView.setRounded()

如果您的图片是圆形的,它的高度和宽度将完全相同(即 120)。您只需取该数字的一半并在您的代码中使用它 (image.layer.cornerRadius = 60)。

以上所有答案都不能解决我的问题。我的 ImageView 被放置在自定义的 UITableViewCell 中。因此我也从这里调用了 layoutIfNeeded() 方法。示例:

 class NameTableViewCell:UITableViewCell,UITextFieldDelegate { ...

 override func awakeFromNib() {

    self.layoutIfNeeded()
    profileImageView.layoutIfNeeded()

    profileImageView.isUserInteractionEnabled = true
    let square = profileImageView.frame.size.width < profileImageView.frame.height ? CGSize(width: profileImageView.frame.size.width, height: profileImageView.frame.size.width) : CGSize(width: profileImageView.frame.size.height, height:  profileImageView.frame.size.height)
    profileImageView.addGestureRecognizer(tapGesture)
    profileImageView.layer.cornerRadius = square.width/2
    profileImageView.clipsToBounds = true;
}

基于@DanielQ 的回答

Swift 4 和 Swift 3

import UIKit

extension UIImageView {

    func setRounded() {
        self.layer.cornerRadius = (self.frame.width / 2) //instead of let radius = CGRectGetWidth(self.frame) / 2
        self.layer.masksToBounds = true
    }
}

您可以在任何 ViewController 中使用它:

imageView.setRounded()

Swift3/Swift4 开发者:

let radius = yourImageView.frame.width / 2
yourImageView.layer.cornerRadius = radius
yourImageView.layer.masksToBounds = true

对于Swift 4:

import UIKit

extension UIImageView {

func makeRounded() {
    let radius = self.frame.width/2.0
    self.layer.cornerRadius = radius
    self.layer.masksToBounds = true
   }
}

这种方式是成本最低的方式,并且始终使您的图像视图呈圆形:

class RoundedImageView: UIImageView {

    override init(frame: CGRect) {
        super.init(frame: frame)

        clipsToBounds = true
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        clipsToBounds = true
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        assert(bounds.height == bounds.width, "The aspect ratio isn't 1/1. You can never round this image view!")

        layer.cornerRadius = bounds.height / 2
    }
}

其他答案告诉您根据 UIViewControllers viewDidLoad() 方法中设置的帧计算来使视图四舍五入。 这是不正确的,因为不确定最终帧是什么。

// code to make the image round


import UIKit

extension UIImageView {
public func maskCircle(anyImage: UIImage) {


    self.contentMode = UIViewContentMode.ScaleAspectFill
    self.layer.cornerRadius = self.frame.height / 2
    self.layer.masksToBounds = false
    self.clipsToBounds = true




    // make square(* must to make circle),
    // resize(reduce the kilobyte) and
    // fix rotation.
    //        self.image = prepareImage(anyImage)
}
}

// 从视图控制器调用函数

self.imgCircleSmallImage.maskCircle(imgCircleSmallImage.image!)
struct CircleImage: View {
    var image: Image

    var body: some View {
        image
           .clipShape(Circle())
    }
}

这对 SwiftUI

是正确的
imageView.layer.cornerRadius = imageView.frame.height/2
imageView.clipToBounds = true

对于圆形图像,在扩展中只需以下代码就足够了:

self.layoutIfNeeded() // 如果是 autolayout(Tom Spee 在评论中提到)。

还要确保 UIImageView contentMode 的 属性 设置正确以获得结果。 在我的例子中是:

imageView.contentMode = .scaleAspectFit


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