私はプログラムでカスタムアクティビティインジケータビューを作成しようとしています。問題はアニメーション化が始まらないということです。私はスピナーをまったく見ないカスタムUIActivityIndicatorViewを作成する際にいくつか問題がある
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)
:
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()内のコードは次のとおりです。ここspinner.swiftクラスのコードです、およびコンソールで、次のメッセージが表示されます:
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
そして、あなたは基礎1を使用するアニメーションメソッドをオーバーライドしていませんので、falseを返しisAnimatingプロパティ:
あなたのフラグプロパティのdidSetを使用して、 – weissja19