Как сделать UIImageView с закругленными углами на Swift iOS Playground?
Внутри его нужно заполнить цветом.
Как сделать UIImage/-View с закругленными углами CGRect (Swift)
Ответы (8)
let imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.backgroundColor = UIColor.redColor()
imageView.layer.cornerRadius = 8.0
imageView.clipsToBounds = true
Результат:
Для кадра с закругленным кругом в 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;
Попробуйте это, это сработало для меня.
self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = true
Я устал писать установить радиус и маску для привязки для каждого UIView. Поэтому я сделал следующее расширение для UIView. Должен работать для каждого подкласса UIView, хотя я его не тестировал. Конечно, расширение может быть сужено для конкретных представлений, которые вы используете.
extension UIView {
func setRadius(radius: CGFloat? = nil) {
self.layer.cornerRadius = radius ?? self.frame.width / 2;
self.layer.masksToBounds = true;
}
}
По умолчанию будет использоваться половина ширины представления, если вы не передадите ему какое-либо конкретное значение.
Если вы хотите иметь возможность округлять каждый 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
}
}
}
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
}
}
После этого вам нужно только выбрать элемент, для которого вы хотите изменить это, и установить пользовательский класс в класс, который мы создали ранее.
Установка layer.cornerRadius = 10 в разделе Определяемые пользователем атрибуты времени выполнения в инспекторе идентификации работает даже с повторяющимися элементами, такими как ячейки таблицы.