Ios 如何使UIButton在按下时收缩为UIActivityIndicator?

Ios 如何使UIButton在按下时收缩为UIActivityIndicator?,ios,swift,uibutton,uiactivityindicatorview,Ios,Swift,Uibutton,Uiactivityindicatorview,我试图创建一个UIButton,当点击它时,它会缩小为一个活动指示器。我所指的UIButton被命名为Request Ride。我已经设置了大部分代码,但由于某种原因,按钮不会收缩,指示器也不会显示?我将附加应用程序的图片和我的代码 //我的应用程序 //我需要的最终结果 //主情节提要 //HomeVC @IBAction func actionBtnWasPressed(_ sender: Any) { actionBtn.animateButton(shouldLo

我试图创建一个UIButton,当点击它时,它会缩小为一个活动指示器。我所指的UIButton被命名为Request Ride。我已经设置了大部分代码,但由于某种原因,按钮不会收缩,指示器也不会显示?我将附加应用程序的图片和我的代码

//我的应用程序

//我需要的最终结果

//主情节提要

//HomeVC

@IBAction func actionBtnWasPressed(_ sender: Any) {
        actionBtn.animateButton(shouldLoad: true, withMessage: nil)
    }
//圆形阴影按钮

class RoundedShadowButton: UIButton {

    // Variables
    var originalSize: CGRect?

    func setupView() {
        originalSize = self.frame
        self.layer.cornerRadius = 5.0
        self.layer.shadowRadius = 10.0
        self.layer.shadowColor = UIColor.darkGray.cgColor
        self.layer.shadowOpacity = 0.3
        self.layer.shadowOffset = CGSize.zero
    }

    override func awakeFromNib() {
        setupView()
    }

    func animateButton(shouldLoad: Bool, withMessage message: String?) {

        let spinner = UIActivityIndicatorView()
        spinner.style = .large
        spinner.color = UIColor.darkGray
        spinner.alpha = 0.0
        spinner.hidesWhenStopped = true
        spinner.tag = 21

        if shouldLoad {
            self.addSubview(spinner)
            self.setTitle("", for: .normal)
            UIView.animate(withDuration: 0.2, animations: {
                self.layer.cornerRadius = self.frame.height / 2
                self.frame = CGRect(x: self.frame.midX - (self.frame.height / 2), y: self.frame.origin.y, width: self.frame.height, height: self.frame.height)
            }) { (finished) in
                if finished == true {
                    spinner.startAnimating()
                    spinner.center = CGPoint(x: self.bounds.width / 2 + 1, y: self.bounds.width / 2 + 1)
                    UIView.animate(withDuration: 0.2) {
                        spinner.alpha = 1.0
                    }
                }
            }
            self.isUserInteractionEnabled = false
        } else {
            self.isUserInteractionEnabled = true

            for subview in self.subviews {
                if subview.tag == 21 {
                    subview.removeFromSuperview()
                }
            }

            UIView.animate(withDuration: 0.2) {
                self.layer.cornerRadius = 5.0
                self.frame = self.originalSize!
                self.setTitle(message, for: .normal)
            }
        }
    }
}

一个明显的事实是,这条线是完全错误的:

spinner.center = CGPoint(x: self.frame.width / 2 + 1, y: self.frame.width / 2 + 1)
您未正确放置微调器。如果活动视图是按钮的子视图,则需要将其居中于按钮边界的中间,而不是其框架

我能够得到一种有点像你所描述的效果:


因此,如果你的值正确,这应该是可能的。

发布代码而不是图像。@MojtabaHosseini我编辑了这篇文章以添加我的代码:)我如何着手解决这个问题?我理解,但这是我第一次做活动指示程序添加“屏幕广播”显示一个人可能可以做你想做的事情。K我将我的边界添加到微调器中心,接下来需要修复什么?