在制作自定义 UIActivityIndi​​catorView 时遇到一些问题

Having some trouble making a custom UIActivityIndicatorView

我正在尝试以编程方式创建自定义 activity 指标视图。问题是它永远不会开始动画。这是 spinner.swift class:

的代码
import UIKit

class spinner: UIActivityIndicatorView {

var flag = Bool()

override init(frame: CGRect) {

    super.init(frame: frame)
    self.flag = true
    self.isHidden = false

 }

required init(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func startAnimating() {

    self.animate()

}

func animate()
{

    if flag == true
    {

        UIView.animate(withDuration: 0.3, animations: {

            self.layer.setAffineTransform(CGAffineTransform(scaleX: 0.5, y: 1))

        }) { (success) in

            if success == true
            {

                UIView.animate(withDuration: 0.3, animations: {

                    self.layer.setAffineTransform(CGAffineTransform.identity)

                    }, completion: { (success) in

                        if success == true
                        {

                            self.animate()

                        }

                })

            }

         }


      }

  }

override func stopAnimating() {
    self.flag = false

}

override func draw(_ rect: CGRect) {

    let path = UIBezierPath(ovalIn: rect)
    UIColor.cyan.setStroke()
    path.stroke()
    UIColor.red.setFill()
    path.fill()

  }

}

这是我添加微调器的 viewDidLoad() 中的代码:

    let aiv = spinner(frame: CGRect(x: self.view.bounds.width/2-35, y: self.view.bounds.height/2-35, width: 70, height: 70))
    aiv.hidesWhenStopped = true
    self.view.addSubview(aiv)
    aiv.startAnimating()
    print(aiv.isAnimating)
    print(air)

我根本没有看到微调器,并且在控制台中收到以下消息:

    false
    <spinner.spinner: 0x7f82b3e08240; baseClass = UIActivityIndicatorView; frame = (170 298.5; 35 70); transform = [0.5, 0, 0, 1, 0, 0]; hidden = YES; animations = { transform=<CABasicAnimation: 0x6080000364a0>; }; layer = <CALayer: 0x608000035120>>

根据日志,微调器是隐藏的,这意味着它从未开始动画。

如果有人能指出我哪里出错了,并提出可能的修复建议,那就太好了。 谢谢!

您的问题出现是因为来电:
aiv.hidesWhenStopped = true
并且 属性 isAnimating returns false 因为您覆盖了动画方法而不是使用基础方法。
当您开始和停止您的自定义动画时,您应该在您的自定义 class 中设置这个 属性。
同样的情况是hidesWhenStopped。这应该由您在 class 中实现。
我还建议将 UIView 用作内部带有 UIActivityIndi​​cator 的子 class,因为如果您想启动 ActivityIndi​​cator,AffineTransformation 可能会相互干扰。