Подтвердить что ты не робот

Как правильно установить изображение в круге, например imageContacts в Swift?

Я хочу показать картинку в imageView, как контакт изображения (по кругу). Но когда я попытаюсь показать это, imageView масштабирует его размер, и это не отображается правильно по кругу.

 image.layer.borderWidth=1.0
 image.layer.masksToBounds = false
 image.layer.borderColor = UIColor.whiteColor().CGColor
 image.layer.cornerRadius = image.frame.size.height/2
 image.clipsToBounds = true

Я хочу показать следующее: enter image description here

Но я понимаю: enter image description here

Как это изменить размер изображения для размера UIImageView, чтобы показать круг?

Спасибо!

4b9b3361

Ответ 1

Какой размер frame вы используете для image? Я могу получить идеальный круг, если я задал рамку как квадрат.

let image = UIImageView(frame: CGRectMake(0, 0, 100, 100))

Ответ 2

Это решение, которое я использовал в своем приложении:

var image: UIImage = UIImage(named: "imageName")
imageView.layer.borderWidth = 1.0
imageView.layer.masksToBounds = false
imageView.layer.borderColor = UIColor.whiteColor().CGColor
imageView.layer.cornerRadius = image.frame.size.width/2
imageView.clipsToBounds = true

Swift 4.0

let image = UIImage(named: "imageName")
imageView.layer.borderWidth = 1.0
imageView.layer.masksToBounds = false
imageView.layer.borderColor = UIColor.white.cgColor
imageView.layer.cornerRadius = image.frame.size.width / 2
imageView.clipsToBounds = true

Ответ 3

Быстрое и Простое решение.

Как маска UIImage окружать без обрезки с помощью Swift.

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

Как позвонить:

let anyAvatarImage:UIImage = UIImage(named: "avatar")!
avatarImageView.maskCircle(anyAvatarImage)

Ответ 4

Создайте свой пользовательский круг UIImageView и создайте круг под макетом. Subviews поможет, если вы используете Autolayout.

/*
      +-------------+
      |             |
      |             |
      |             |
      |             |
      |             |
      |             |
      +-------------+
  The IMAGE MUST BE SQUARE
*/
class roundImageView: UIImageView {

    override init(frame: CGRect) {
        // 1. setup any properties here
        // 2. call super.init(frame:)
        super.init(frame: frame)
        // 3. Setup view from .xib file
    }

    required init?(coder aDecoder: NSCoder) {
        // 1. setup any properties here
        // 2. call super.init(coder:)
        super.init(coder: aDecoder)
        // 3. Setup view from .xib file
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.borderWidth = 1
        self.layer.masksToBounds = false
        self.layer.borderColor = UIColor.white.cgColor
        self.layer.cornerRadius = self.frame.size.width/2
        self.clipsToBounds = true
    }
}

Ответ 5

Это все, что вам нужно....

        profilepic = UIImageView(frame: CGRectMake(0, 0, self.view.bounds.width * 0.19 , self.view.bounds.height * 0.1))
        profilepic.layer.borderWidth = 1
        profilepic.layer.masksToBounds = false
        profilepic.layer.borderColor = UIColor.blackColor().CGColor
        profilepic.layer.cornerRadius = profilepic.frame.height/2
        profilepic.clipsToBounds = true
        slider.addSubview(profilepic)

Ответ 6

Я бы предложил сделать ваш файл изображения идеальным квадратом для начала. Это можно сделать практически в любой программе редактирования фотографий. После этого это должно работать в viewDidLoad. Кредит на это видео

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

Ответ 7

reviewerImage.layer.cornerRadius = reviewerImage.frame.size.width / 2;
reviewerImage.clipsToBounds = true

Ответ 8

Если вы используете UIViewController здесь, как это сделать с помощью якорей. Ключ должен установить imageView layer.cornerRadius в viewWillLayoutSubviews следующим образом:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    imageView.layer.cornerRadius = imageView.frame.size.width / 2
}

Также убедитесь, что heightAnchor и widthAnchor имеют одинаковый размер. Они оба 100 в моем примере ниже

Код:

let imageView: UIImageView = {
    let imageView = UIImageView()
    imageView.translatesAutoresizingMaskIntoConstraints = false
    imageView.layer.borderWidth = 1.0
    imageView.clipsToBounds = true
    imageView.layer.borderColor = UIColor.white.cgColor
    return imageView
}()


override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(imageView)

    imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
    imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    imageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 50).isActive = true

    imageView.image = UIImage(named: "pizzaImage")
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    imageView.layer.cornerRadius = imageView.frame.size.width / 2
}

Если вы используете CollectionView Cell, установите imageView layer.cornerRadius в layoutSubviews():

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

    addSubview(imageView)

    imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
    imageView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
    imageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 50).isActive = true

    imageView.image = UIImage(named: "pizzaImage")

}

override func layoutSubviews() {
    super.layoutSubviews() // call super.layoutSubviews()
    imageView.layer.cornerRadius = imageView.frame.size.width / 2
}

Ответ 9

Я исправил его, изменяя представление:

  • Перейдите на страницу Main.storyboard.
  • Нажмите на свое изображение
  • Вид → Режим → Аспект заполнения

Он отлично работает

Ответ 10

попробуйте это. быстрый код

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    perform(#selector(self.setCircleForImage(_:)), with: pickedImage, afterDelay: 0)
}


 @objc func setCircleForImage(_ imageView : UIImageView){
    imageView.layer.cornerRadius = pickedImage.frame.size.width/2
    imageView.clipsToBounds = true
}

Ответ 11

Попытайтесь, чтобы это сработало для меня,

set imageView width и height такой же.

стриж

imageview?.layer.cornerRadius = (imageview?.frame.size.width ?? 0.0) / 2     
imageview?.clipsToBounds = true
imageview?.layer.borderWidth = 3.0
imageview?.layer.borderColor = UIColor.white.cgColor

Скриншот enter image description here

Цель C

self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2;
self.imageView.clipsToBounds = YES;
self.imageView.layer.borderWidth = 3.0f;
self.imageView.layer.borderColor = [UIColor whiteColor].CGColor;

Надеюсь, это поможет кому-то.

Ответ 12

это расширение действительно работает для меня (в том числе в быстром 4+)

extension UIImageView {
    func roundedImage() {
        self.layer.cornerRadius = (self.frame.size.width) / 2;
        self.clipsToBounds = true
        self.layer.borderWidth = 3.0
        self.layer.borderColor = UIColor.white.cgColor
    }
}

Тогда просто назовите это как

imageView.roundedImage() 

Ответ 13

Эта работа отлично для меня. Порядок строк Важный

func circularImage(photoImageView: UIImageView?)
{
    photoImageView!.layer.frame = CGRectInset(photoImageView!.layer.frame, 0, 0)
    photoImageView!.layer.borderColor = UIColor.grayColor().CGColor
    photoImageView!.layer.cornerRadius = photoImageView!.frame.height/2
    photoImageView!.layer.masksToBounds = false
    photoImageView!.clipsToBounds = true
    photoImageView!.layer.borderWidth = 0.5
    photoImageView!.contentMode = UIViewContentMode.ScaleAspectFill
}

Как использовать:

    @IBOutlet weak var photoImageView: UIImageView!
    ...
    ...
    circularImage(photoImageView)

Ответ 14

я узнал, что ваша ширина и высота изображения должны возвращать четное число при делении на 2, чтобы получить идеальный круг, например.

let image = UIImageView(frame: CGRectMake(0, 0, 120, 120))

это не должно быть чем-то вроде   let image = UIImageView (frame: CGRectMake (0, 0, 130, 130))

Ответ 15

Это также работает для меня. Для идеального результата круга используйте тот же размер для ширины и высоты. например image.frame = CGRect(0,0,200, 200)

Для не идеального круга ширина и высота не должны быть такими же, как эти коды ниже.

 image.frame = CGRect(0,0,200, 160)
 image.layer.borderColor = UIColor.whiteColor().CGColor
 image.layer.cornerRadius = image.frame.size.height/2
 image.layer.masksToBounds = false
 image.layer.clipsToBounds = true
 image.contentMode = .scaleAspectFill

Ответ 16

У меня был аналогичный результат (больше овала, чем круг). Оказалось, что ограничения, которые я установил на UIImageView, принудительно превратили его в овал вместо круга. После того, как мы установили это, работающие выше решения работали.

Ответ 17

Используйте этот код, чтобы сделать изображение круглым

     self.layoutIfNeeded()
     self.imageView.layer.cornerRadius = 
     self.imageView.frame.width/2
     self.imageView.layer.masksToBounds = true