如何在swift中设置圆形图像

时间:2015-01-21 18:54:55

标签: ios swift uiimageview

如何让我用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/

15 个答案:

答案 0 :(得分:169)

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
}

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

答案 1 :(得分:34)

您可以简单地创建扩展程序:

import UIKit

extension UIImageView {

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

并使用如下:

imageView.setRounded()

答案 2 :(得分:13)

基于@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()

答案 3 :(得分:11)

如果你的意思是你想在Swift中创建一个UIImageView循环,你可以使用这段代码:

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

答案 4 :(得分:6)

不知道这是否对任何人都有帮助,但我在这个问题上挣扎了一段时间,网上的答案都没有帮助我。对我来说问题是我在故事板中的图像上设置了不同的高度和宽度。我尝试了堆栈上的每个解决方案,事实证明它就是那么简单。一旦我将它们设置为200,我的圆形轮廓图像就完美了。这是我的VC中的代码。

profileImage2.layer.cornerRadius = profileImage2.frame.size.width/2
    profileImage2.clipsToBounds = true

答案 5 :(得分:4)

Swift 4

import UIKit

extension UIImageView {

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

答案 6 :(得分:2)

上述所有答案都无法解决我的问题。我的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;
}

答案 7 :(得分:1)

首先需要设置相等的宽度和高度来获取圆形ImageView.Below我将宽度和高度设置为100,100。如果要根据所需的大小设置相等的宽度和高度,请在此处设置。

web.config

然后你需要为角半径设置高度/ 2

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

答案 8 :(得分:1)

对于Swift3 / Swift4开发人员:

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

Download and use Toucan from GitHub.它在Swift中提供。心里难以理解。它还提供了许多其他图像效果。

答案 11 :(得分:0)

这种方法是最便宜的方法,可以始终使图像视图保持四舍五入:

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

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

答案 12 :(得分:0)

// 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!)

答案 13 :(得分:0)

struct CircleImage: View {
    var image: Image

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

这对SwiftUI

是正确的

答案 14 :(得分:0)

imageView.layer.cornerRadius = imageView.frame.height/2
imageView.clipToBounds = true