0

Я сделал индикатор занятости, который работает очень хорошо, пока он находится в ViewController, я хочу отобразить индикатор. Я попытался переместить это в новый класс типа UIView, но не может получить ничего, что должно появиться в ViewController.Как создать новый класс из UIVisualEffectView и UIActivityIndicatorView

Это рабочий код, который не его собственный тип:

//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 
} 

Это код, который, кажется, не создавать ничего.

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") 
} 
} 

И в ViewDidLoad:

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

ответ

0

Фигурные его. Вот код, если кто-то заинтересован. Но, это правильный способ выполнить эту задачу?

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 
} 
} 

И тогда в использовании:

@IBAction func toggle() { 
    if test.isActive { 
     test.stopActivity() 
     test.removeFromSuperview() 
     println("Stopping") 
    } else { 
     test.startActivity() 
     self.view.addSubview(test) 
     println("Starting") 
    } 
} 
Смежные вопросы