проблемы с UIImageView.слой.cornerRadius для создания закругленных изображений на разных плотностях пикселей ios
Я просто пытаюсь создать идеально круглое изображение. Вот мой код:
myImage.layer.cornerRadius = myImage.frame.size.width/2
myImage.layer.masksToBounds = true
это работает на 4s, но не совсем круглый на 5s, и появляется как закругленный прямоугольник на iphone 6.
Я предполагаю, что это связано с рамы.размер.ширина возвращает значения в пикселях, а не точки или что-то в этом роде, но я не смог решить эту проблему.
5 ответов
Если вы вводите этот код в viewDidLoad
, попробуйте переместить его в viewDidLayoutSubviews
.
Я предполагаю, что это проблема автоматического макета - хотя вы использовали свойство радиуса угла соответствующим образом и фактически делаете кадр изображения круговым, после автоматического макета радиус угла остается тем же, но изображение растягивается так, что оно больше не круговое.
проблема в том, что если вы измените cornerRadius любого вида и ожидаете, что он будет выглядеть как круг, вид должен быть квадратом.
теперь из-за разных устройств и разного размера устройства размер вашего изображения может измениться, и это может быть прямоугольник.
, например Если вы просматриваете 50 * 50
myImage.layer.cornerRadius = myImage.frame.size.width/2
это добавило бы угловые радиостанции 25 с обеих сторон, чтобы сделать его кругом.
но из-за автоматической компоновки изменения устройства, ваш взгляд может быть 50 * 80
радиус угла добавит 25, но поскольку высота 80, он добавит 25 с обеих сторон, а оставшиеся 30 не будут кривой и выглядят прямо.
что вы можете сделать, это попробовать просмотреть экран в различных ориентациях в раскадровке и изменить ограничения автоматической компоновки (или структуры и пружины), чтобы убедиться, что представление изображения является квадратом во всех устройствах
если ваш код в viewDidLoad
на ViewController
, попробуйте переместить его в viewDidLayoutSubviews
.
если ваше округленное изображение находится в tableViewCell, попробуйте переместить его в draw
.
override func draw(_ rect: CGRect) {
avatarView.layer.cornerRadius = avatarView.frame.size.width / 2
avatarView.layer.masksToBounds = true
avatarView.clipsToBounds = true
avatarView.contentMode = .scaleAspectFill
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
myImage.layer.cornerRadius = myImage.frame.size.width/2
myImage.layer.masksToBounds = true
}
Это должно работать:
myImage.layer.cornerRadius = myImage.**bounds**.size.width/2
myImage.layer.masksToBounds = true