2016-10-30 2 views
0

Я прочитал в других вопросах, которые для того, чтобы применить круг маску к 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 
    } 

} 
+0

Вы можете распечатать кадр '' ChatOverview'' до того, как будет выполнена строка 'self.v.applyCircleMask()'? – alexburtnik

+0

Я закодировал печать, и результат дает мне эту ширину и высоту: Frame (1463.0, 1463.0) и Layer (1463.0, 1463.0). Такой же размер как для кадра, так и для слоя imageView. –

+0

Попробуйте добавить 'view.layoutIfNeeded()' в самом конце метода 'viewDidLoad' – alexburtnik

ответ

0

Вместо clipsToBounds, используйте:

self.imageView.layer.masksToBounds = true 
+0

Я только что попробовал это, но он делает то же самое. –

+0

Пожалуйста, проверьте обновленный номер –

+0

То же самое, не работает :( –

Смежные вопросы