2017-01-09 5 views
-1

Внутри пользовательских UIView, я переопределил draw() функции. Мне нужно нарисовать изображение в круговой макете. Кроме того, если это возможно, мне нужно изменить размер изображения, сохраняя аспект заполнения/соответствия. Как это сделать?Как нарисовать круговой UIImage на графике ядра

Код:

@IBDesignable class ScoreGraphView: UIView { 

    override func draw(_ rect: CGRect) { 

     let iv = UIImageView(image: UIImage(named: "women")) 
     iv.frame = CGRect(x: 0, y: 0, width: rect.width, height: rect.height) 
     iv.layer.cornerRadius = 20 
     iv.clipsToBounds = true 
     iv.layer.masksToBounds = true 
     iv.backgroundColor = UIColor.clear 
     iv.draw(CGRect(x: 0, y: 0, width: rect.width, height: rect.height)) 
    } 
} 

Это выше линии могут быть использованы для нанесения изображения. cornerRadius/masksToBounds не работают.

Заранее благодарен!

+2

'cornerRadius' работает только если вы также установили 'masksToBounds = true' – Tj3n

+0

@ Tj3n Вы имеете в виду clipToBounds = true? Я тоже пробовал, но не повезло. –

+0

'iv.layer.masksToBounds = true' не работает? Это отлично работает для меня, может быть, в вашей 'draw'-функции вы переопределяете что-то? – Tj3n

ответ

0

Наконец я получил подсказки,

let userimageView : UIImageView = UIImageView(frame: rect) 
userimageView.image = UIImage(named: "women") 
userimageView.backgroundColor = UIColor.clear; 
userimageView.alpha = 1.0 
userimageView.clipsToBounds = false 
userimageView.layer.cornerRadius = 20.0 
userimageView.layer.masksToBounds = true 

self.layer.addSublayer(userimageView.layer) 
-1

Это IBDesignable, посмотрели ли вы на свой объект clipsToBounds в раскадровке для ScoreGraphView?

Попробуйте добавить это к вашему классу ScoreGraphView, а также:

override func awakeFromNib() { 
    super.awakeFromNib() 

    self.clipsToBounds = true 
    self.layer.masksToBounds = true 
} 
+0

не работал :( –

1

второй Покушение:

override func draw(_ rect: CGRect) { 
    layer.cornerRadius = 20 
    clipsToBounds = true 
    let iv = UIImageView(image: UIImage(named: "women")) 
    iv.frame = CGRect(x: 0, y: 0, width: rect.width, height: rect.height) 
    iv.draw(CGRect(x: 0, y: 0, width: rect.width, height: rect.height)) 
} 
+0

App crashed !, 'fatal error: init (coder :) не был реализован:' –

+0

Я отредактировал свой ответ - так как я динамически добавлял ScoreGraphView в код. – CoderMike

+0

Это работает, но что если я хочу нарисовать изображение в точке (10,10) с размером (50,50), но все равно хочу круговым, а также фон всегда черный. Я попробовал с self.backgroudColor = UIColor.white & iv.backgroundColor = UIColor.clear, но не работает. :( –

0

Пожалуйста, попробуйте этот

imageView.layer.cornerRadius = imgProfile.frame.size.height/2 
imageView.clipsToBounds = true 
Смежные вопросы