0

J'ai fait un indicateur occupé qui fonctionne très bien, tant que c'est dans le ViewController que je veux afficher l'indicateur. J'ai essayé de passer à une nouvelle classe de type UIView, mais ne peut rien afficher dans le ViewController.Comment créer une nouvelle classe à partir de UIVisualEffectView et UIActivityIndicatorView

C'est le code de travail, ce n'est pas son propre type:

//Create a busy indicator that can be shown by changing a single variable 
var blur: UIVisualEffectView? 
var spinner: UIActivityIndicatorView? 
var showingActivity: Bool = false { 
    didSet{ 
     switch showingActivity { 
     case true: 
      blur = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.Dark)) 
      blur!.frame = CGRectMake(100, 100, 150, 150) 
      blur!.center = self.view.center 
      blur!.layer.cornerRadius = 10 
      blur!.clipsToBounds = true 
      self.view.addSubview(blur!) 

      spinner = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) 
      spinner!.frame = CGRectMake(0, 0, 50, 50) 
      spinner!.center = self.view.center 
      spinner!.hidesWhenStopped = true 
      spinner!.startAnimating() 
      self.view.addSubview(spinner!) 

      UIApplication.sharedApplication().networkActivityIndicatorVisible = true //network activity option 
     case false: 
      blur?.removeFromSuperview() 
      spinner?.removeFromSuperview() 
      blur = nil 
      spinner = nil 

      UIApplication.sharedApplication().networkActivityIndicatorVisible = false //network activity option 
     default: break 
     } 
    } 
} 
func toggleNetworkActivity() { 
    showingActivity = !showingActivity 
} 

Ceci est le code qui ne semble pas créer quoi que ce soit.

class busy : UIView { 
var blur = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.Dark)) 
var spinner = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) 

init() { 
    let frame = CGRect(x: 0, y: 0, width: 300, height: 300) 
    super.init(frame: frame) 

    blur.frame = CGRectMake(100, 100, 150, 150) 
    blur.center = self.center 
    blur.layer.cornerRadius = 10 
    blur.clipsToBounds = true 

    spinner.frame = CGRectMake(0, 0, 50, 50) 
    spinner.center = self.center 
    spinner.hidesWhenStopped = true 
    spinner.startAnimating() 

    self.setNeedsDisplay() 

} 

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

Et viewDidLoad:

var test = busy() 
test.center = self.view.center 
self.view.addSubview(test) 

Répondre

0

figured it out. Voici le code, si quelqu'un est intéressé. Mais, est-ce la bonne façon de faire ce genre de tâche?

class busy : UIView { 
private var blur = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.Dark)) 
private var spinner = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) 
var isActive: Bool = false 

override init (frame : CGRect) { 
    super.init(frame : frame) 
} 

required init(coder aDecoder: NSCoder) { 
    fatalError("This class does not support NSCoding") 
} 

func startActivity() { 
    let x = UIScreen.mainScreen().bounds.width/2 
    let y = UIScreen.mainScreen().bounds.height/2 

    blur.frame = CGRectMake(100, 100, 150, 150) 
    blur.layer.cornerRadius = 10 
    blur.center = CGPoint(x: x, y: y) 
    blur.clipsToBounds = true 

    spinner.frame = CGRectMake(0, 0, 50, 50) 
    spinner.hidden = false 
    spinner.center = CGPoint(x: x, y: y) 
    spinner.startAnimating() 

    super.addSubview(blur) 
    super.addSubview(spinner) 
    isActive = true 
} 

func stopActivity() { 
    blur.removeFromSuperview() 
    spinner.removeFromSuperview() 
    isActive = false 
} 
} 

Et puis utilisé:

@IBAction func toggle() { 
    if test.isActive { 
     test.stopActivity() 
     test.removeFromSuperview() 
     println("Stopping") 
    } else { 
     test.startActivity() 
     self.view.addSubview(test) 
     println("Starting") 
    } 
}