2015-05-04 13 views
5

Próbuję zrobić wskaźnik aktywności za pomocą szybkich, ale jest coś mi brakujeWskaźnik aktywności w Swift

Oto kod Przycisk aktywność start:

Indicator = ActivityIndicator().StartActivityIndicator(ViewController()); 

A oto kod przycisk aktywność przystanek

ActivityIndicator().StopActivityIndicator(ViewController(),indicator: Indicator); 

i kod dla klasy wskaźnik aktywności jest

class ActivityIndicator: NSObject { 

    var myActivityIndicator:UIActivityIndicatorView! 

    func StartActivityIndicator(obj:UIViewController) -> UIActivityIndicatorView 
    { 

     self.myActivityIndicator = UIActivityIndicatorView(frame:CGRectMake(100, 100, 100, 100)) as UIActivityIndicatorView; 

     self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
     self.myActivityIndicator.center = obj.view.center; 

     obj.view.addSubview(myActivityIndicator); 

     self.myActivityIndicator.startAnimating(); 
     return self.myActivityIndicator; 
    } 

    func StopActivityIndicator(obj:UIViewController,indicator:UIActivityIndicatorView)-> Void 
    { 
      indicator.removeFromSuperview(); 
    } 


} 

Dzięki problem rozwiązany

gdy piszę kod wiem, że czas, że muszę zdać siebie w funkcji ale w tym czasie nie wiedziałem co typ własnym przedstawieniu więc II nie mogę odbierać, dopóki nie poznam typu, wtedy zdecyduję się spróbować uzyskać inny typ (UIView, UIActivityIndicatorView, UIViewController), a następnie stwierdziłem, że powinien on być być UIViewController, ale zapomniałem, że powinno być przekazać z siebie i Szukam za co przejść w funkcji wywoływania i myślałem, że l et's spróbuj UIViewController i nie dał mi błędu, więc pomyślałem, że to prawda , ale kiedy to nie działa, myślałem, że jestem wystarczająco blisko, więc lepiej , aby zapytać eksperta o problem. A jak się spodziewałem problem jest rozwiązany w ciągu kilku minut

Swift 3 wersja

class ActivityIndicator: NSObject { 

    var myActivityIndicator:UIActivityIndicatorView! 

    func StartActivityIndicator(obj:UIViewController) -> UIActivityIndicatorView 
    { 

     self.myActivityIndicator = UIActivityIndicatorView(frame:CGRect(x: 100, y: 100, width: 100, height: 100)) as UIActivityIndicatorView 

     self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
     self.myActivityIndicator.center = obj.view.center; 

     obj.view.addSubview(myActivityIndicator); 

     self.myActivityIndicator.startAnimating(); 
     return self.myActivityIndicator; 
    } 

    func StopActivityIndicator(obj:UIViewController,indicator:UIActivityIndicatorView)-> Void 
    { 
     indicator.removeFromSuperview(); 
    } 


} 
+0

Gdy wywołujesz 'StopActivityIndicator()" (przy okazji powinieneś zaczynać od Lowe case), wywołujesz go na nowej instancji zamiast instancji zwróconej przez funkcję startową – Paulw11

+0

Brak jej wielkich liter s i Odpowiadam, że tak, ale czy w takim przypadku problem z zatrzymaniem wskaźnika nie powinien być właściwy? –

+0

Górna/mała litera s to po prostu konwencja - klasy zaczynają się od kapitału, funkcje i zmienne zaczynają się od małej litery. Problem polega na tym, że zatrzymujesz nową instancję zamiast instancji, którą uruchomiłeś. Musisz zapisać obiekt od połączenia początkowego i wywołać przystanek na tej instancji – Paulw11

Odpowiedz

5

wydaje się, że za każdym razem wywołać start/stop, należy utworzyć nową instancję ViewController Wystarczy zastąpić ViewController do self i spróbuj

Na przykład

Indicator = ActivityIndicator().StartActivityIndicator(self); 
+0

działa idealnie !!! Jestem po prostu zdezorientowany tym, dlaczego mam ten problem –

+0

Jeśli to działa, proszę przyjąć moją odpowiedź. – Leo

+2

@VarunNaharia Używając 'ViewController()' tworzysz nowe wystąpienie klasy 'ViewController', a ta instancja nie jest wyświetlana, chyba że ją jawnie przedstawisz. Użycie 'self' odnosi się do instancji kontrolera, który wywołuje metodę, a ponieważ * jest * pokazane, zobaczysz swój wskaźnik. – Jeffrey

Powiązane problemy