Я прочитал в других вопросах, которые для того, чтобы применить круг маску к UIImageView я должен сделать это:Как применять круг маску UIImageView
self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2
self.imageView.clipsToBounds = true
Но по какой-то причине, когда я делаю это, мой изображение становится скрытым. Когда я удаляю код для применения маски, изображение отображается отлично, но после применения маски ничего не появляется.
Я не знаю, связано ли это с тем, что UIImageView находится внутри другого UIView, но я не понимаю, почему это не сработает.
Эти файлы я использую для работы с изображением:
import UIKit
class ChatViewController: UIViewController {
var v: ChatOverview!
init() {
super.init(nibName: nil, bundle: nil)
self.title = "Chat"
self.tabBarItem.image = UIImage(named: "Chat")
self.tabBarItem.title = "Chats"
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
v = ChatOverview(
withName: "Mariano Rajoy",
andImage: UIImage(named: "Rajoy")!
)
self.view.addSubview(v)
NSLayoutConstraint.activate([
v.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
v.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
v.widthAnchor.constraint(equalToConstant: 200),
v.heightAnchor.constraint(equalToConstant: 200)
])
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.v.applyCircleMask()
}
}
и определение класса ChatOverview:
import UIKit
class ChatOverview: UIView {
var image: UIImage!
var imageView: UIImageView!
init (withName name: String, andImage image: UIImage) {
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
self.image = image
self.isOpaque = false
self.translatesAutoresizingMaskIntoConstraints = false
self.imageView = UIImageView(image: self.image)
self.imageView.contentMode = .scaleAspectFit
self.imageView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(imageView)
NSLayoutConstraint.activate([
self.imageView.centerXAnchor.constraint(equalTo: self.centerXAnchor),
self.imageView.centerYAnchor.constraint(equalTo: self.centerYAnchor),
self.imageView.widthAnchor.constraint(equalTo: self.widthAnchor),
self.imageView.heightAnchor.constraint(equalTo: self.heightAnchor)
])
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func applyCircleMask() {
self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2.0
self.imageView.clipsToBounds = true
}
}
Вы можете распечатать кадр '' ChatOverview'' до того, как будет выполнена строка 'self.v.applyCircleMask()'? – alexburtnik
Я закодировал печать, и результат дает мне эту ширину и высоту: Frame (1463.0, 1463.0) и Layer (1463.0, 1463.0). Такой же размер как для кадра, так и для слоя imageView. –
Попробуйте добавить 'view.layoutIfNeeded()' в самом конце метода 'viewDidLoad' – alexburtnik