2016-10-15 6 views
0

私はプログラムでカスタムアクティビティインジケータビューを作成しようとしています。問題はアニメーション化が始まらないということです。私はスピナーをまったく見ないカスタムUIActivityIndi​​catorViewを作成する際にいくつか問題がある

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プロパティ:

答えて

1

あなたの問題は、コールの表示されます。
カスタムアニメーションを開始および停止するときに、このクラスをカスタムクラスに設定する必要があります。
同じ場合がhidesWhenStoppedです。これはあなたのクラスで実装する必要があります。
ActivityIndi​​catorを開始する場合は、AffineTransformationが互いに中断する可能性があるため、UIViewをUIActivityIndi​​catorを含むサブクラスとして使用することをお勧めします。

+0

あなたのフラグプロパティのdidSetを使用して、 – weissja19

関連する問題