Как сделать UIImage/-View с закругленными углами CGRect (Swift)

Как сделать UIImageView с закругленными углами на Swift iOS Playground?
Внутри его нужно заполнить цветом.


person Thomas    schedule 24.08.2014    source источник
comment
Вы также можете закруглить конкретный край: iosdevcenters .blogspot.com/2018/02/   -  person Bhadresh    schedule 06.06.2018


Ответы (8)


let imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.backgroundColor = UIColor.redColor()
imageView.layer.cornerRadius = 8.0
imageView.clipsToBounds = true

Результат:

введите здесь описание изображения

person Mundi    schedule 24.08.2014

Для кадра с закругленным кругом в Swift у меня это сработало:

self.profileImageView.image =  UIImage(named:"profileUser")
self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = true

И для добавления тени:

self.profileImageView.layer.masksToBounds = NO;
self.profileImageView.layer.cornerRadius = 8;
self.profileImageView.shadowOffset = CGSizeMake(5.0, 5.0);
self.profileImageView.shadowRadius = 5;
self.profileImageView.shadowOpacity = 0.5;
person Javier Calatrava Llavería    schedule 20.03.2015

Попробуйте это, это сработало для меня.

self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = true
person Ronaldoh1    schedule 16.01.2015

Я устал писать установить радиус и маску для привязки для каждого UIView. Поэтому я сделал следующее расширение для UIView. Должен работать для каждого подкласса UIView, хотя я его не тестировал. Конечно, расширение может быть сужено для конкретных представлений, которые вы используете.

extension UIView {      
    func setRadius(radius: CGFloat? = nil) {
        self.layer.cornerRadius = radius ?? self.frame.width / 2;
        self.layer.masksToBounds = true;
    }
}

По умолчанию будет использоваться половина ширины представления, если вы не передадите ему какое-либо конкретное значение.

person Evdzhan Mustafa    schedule 25.04.2016

Свифт 3.0, 4.0

Если вы хотите использовать раскадровку. Я применил это и удостоверился, что «Обрезать до границ» включено.

введите описание изображения здесь

person A. Trejo    schedule 23.08.2018

Если вы хотите иметь возможность округлять каждый UIImageView, вы можете скопировать этот код в свой проект, не забыв проверить clip to bounds и установить его значение равным true.

import UIKit

@IBDesignable
extension UIImageView
{
    private struct AssociatedKey
    {
        static var rounded = "UIImageView.rounded"
    }

    @IBInspectable var rounded: Bool
    {
        get
        {
            if let rounded = objc_getAssociatedObject(self, &AssociatedKey.rounded) as? Bool
            {
                return rounded
            }
            else
            {
                return false
            }
        }
        set
        {
            objc_setAssociatedObject(self, &AssociatedKey.rounded, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            layer.cornerRadius = CGFloat(newValue ? 1.0 : 0.0)*min(bounds.width, bounds.height)/2
        }
    }
}

скриншот

person Mendy    schedule 16.07.2018
comment
Отлично работает, спасибо - person Neo Nguyen; 21.01.2019
comment
вы также можете добавить self.clipsToBounds = true в сеттер, чтобы не беспокоиться об установке его в построителе интерфейса - person Quinn; 08.02.2019

Swift 5.0:

Лично я предпочитаю иметь дополнительный быстрый файл для конкретных изменений, подобных этому. Что я делаю, так это создаю класс, например. «RoundCorner», который является подклассом элемента, который я хочу изменить, в данном случае элемент View. И тогда я переопределяю индивидуальные настройки.

class RoundCorner: UIView {
override func draw(_ rect: CGRect) {
    self.layer.cornerRadius = 10 // change this number to get the corners you want
    self.layer.masksToBounds = true
    }
}

После этого вам нужно только выбрать элемент, для которого вы хотите изменить это, и установить пользовательский класс в класс, который мы создали ранее.

Посмотрите на скриншот здесь

person Panagiotis D.    schedule 17.08.2019

Установка layer.cornerRadius = 10 в разделе Определяемые пользователем атрибуты времени выполнения в инспекторе идентификации работает даже с повторяющимися элементами, такими как ячейки таблицы.

person Daniel Miranda    schedule 11.10.2018