Пользовательский круглый UIButton с круглым изображением - PullRequest
0 голосов
/ 10 ноября 2019

Я создал пользовательский класс для UIButton, который я использовал для добавления закругленных углов и тени на кнопку, также используя @ IBInspectable.

Теперь я хочу использовать ту же кнопку для создания круглогодля выбора профиля изображения. Пользователь нажимает на круглую кнопку, представлена ​​библиотека фотографий, пользователь выбирает фотографию и выбранное изображение добавляется к круглой кнопке.

Моя проблема в том, что после того, как пользователь выбирает изображение, изображение кнопки выглядит квадратным, а не круглым.

Я попытался поиграть со слоем imageView кнопки и попытался установить для него значение clipsToBounds или maskToBounds, но я думаю, что что-то упустил.

Вот код для пользовательской кнопки без компонента ImageView:

import UIKit

class RoundShadowButton: UIButton {

    override init(frame: CGRect){
        super.init(frame: frame)
        imageView?.clipsToBounds = true
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        imageView?.clipsToBounds = true
    }


 @IBInspectable
     var cornerRadius: CGFloat {
         get {
            return layer.cornerRadius
         }
         set {
             layer.cornerRadius = newValue
         }
     }

     @IBInspectable
     var borderWidth: CGFloat {
         get {
             return layer.borderWidth
         }
         set {
             layer.borderWidth = newValue
         }
     }

     @IBInspectable
     var borderColor: UIColor? {
         get {
             let color = UIColor.init(cgColor: layer.borderColor!)
             return color
         }
         set {
             layer.borderColor = newValue?.cgColor
         }
     }

     @IBInspectable
     var shadowRadius: CGFloat {
         get {
             return layer.shadowRadius
         }
         set {
            layer.shadowRadius = newValue
         }
     }
     @IBInspectable
     var shadowOffset : CGSize{

         get{
             return layer.shadowOffset
         }set{
             layer.shadowOffset = newValue
         }
     }

     @IBInspectable
     var shadowColor : UIColor{
         get{
             return UIColor.init(cgColor: layer.shadowColor!)
         }
         set {
             layer.shadowColor = newValue.cgColor
         }
     }
     @IBInspectable
     var shadowOpacity : Float {

         get{
             return layer.shadowOpacity
         }
         set {
             layer.shadowOpacity = newValue
         }
     }
 }

Button before selecting image

Button after selecting image

1 Ответ

0 голосов
/ 10 ноября 2019

Я думаю, вам не хватает того, что если вы не устанавливаете изображение для своей кнопки, кнопка imageView будет nil. Вы должны либо установить maskToBounds для своей кнопки, либо установить ее на imageView после установки изображения. Также, пожалуйста, проверьте ваш угловой радиус, если у вас есть метод, основанный на вашем фрейме, во время автоматической разметки вы можете установить свой угловой радиус на основе .zero frame

...