带有圆形图像视图的自定义圆形 UIButton

Posted

技术标签:

【中文标题】带有圆形图像视图的自定义圆形 UIButton【英文标题】:Custom Round UIButton with Round Image View 【发布时间】:2019-11-10 10:49:07 【问题描述】:

我为 UIButton 创建了一个自定义类,我曾经使用 @IBInspectable 为我的按钮添加圆角和阴影。

现在,我想使用相同的按钮为个人资料图片选择器创建一个圆形按钮。用户点击圆形按钮,显示照片库,用户选择一张照片并将所选图像添加到圆形按钮。

我的问题是用户选择图片后,按钮的imageView是方形的而不是圆形的。

我尝试使用按钮的 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
         
     
 

【问题讨论】:

【参考方案1】:

我认为除非您为按钮设置图像,否则按钮的imageViewnil。您应该将 maskToBounds 设置为您的按钮,或者在设置图像后将其设置为 imageView。另外,请检查您的圆角半径,如果您有基于框架的方法,在自动布局期间您可以根据.zero 框架设置圆角半径

【讨论】:

不幸的是,如果我操作 maskToBounds 我不能再有阴影了。但是感谢您的其他建议!

以上是关于带有圆形图像视图的自定义圆形 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

带有实心圆圈的自定义圆形进度条

带有图像的自定义 UIButton

SignIn with Apple 的自定义圆形按钮

带有圆形边框的Android自定义相机

带有自动布局(snapkit)的圆形视图?

带有条目并具有圆形边框的图像