2012-07-20 16 views
5

ROZWIĄZANIE: Sprawdź poniżej, aby znaleźć rozwiązanie mojego problemu.Jak wyśrodkować wskaźnik UIActivity?

enter image description here

Hej SO,

Mam problemy centrowania się UIActivityIndicator w centrum widoku. Jak widać, jest nieco dalej w pionie niż powinno. To, co mam, to UIScrollView, który później dodaje wyeksportowane UIImage. Przed załadowaniem UIImage mam ten UIActivityIndicator, aby pokazać, że obraz się ładuje.

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 
    self.scrollView.backgroundColor = [UIColor blackColor]; 
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]  initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    spinner.center = self.view.center; 

    [spinner startAnimating]; 
    [self.view addSubview:spinner]; 

Wszelkie pomysły, w jaki sposób mogę dostać do centrum CGPoint i ustawić UIActivityIndicator tam? Nie jestem pewien, dlaczego self.view.center nie działa.

Z góry dziękuję.

EDYCJA: Musiałem uwzględnić wysokość paska nawigacyjnego i pasek kart. Kod Musiałem dodać to:

float navigationBarHeight = [[self.navigationController navigationBar] frame].size.height; 
float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height; 
spinner.center = CGPointMake(self.view.frame.size.width/2.0, (self.view.frame.size.height - navigationBarHeight - tabBarHeight)/2.0); 

enter image description here

Odpowiedz

6

dwa problemy:

  1. Najpierw self.view.center jest ośrodkiem ramy bieżącego widoku na jej temat znajduje się ramka rodzica. Jeśli chcesz mieć środek bieżącego widoku, po drugie, bieżący widok nie zawiera paska nawigacyjnego, więc ustawiasz go w środku ekranu poniżej paska nawigacji. To także sprawi, że będzie wyglądać niżej.

+0

Dzięki @Robert Ryan! Odchodząc od twoich wskazówek, udało mi się sprawić, żeby działało poprawnie. Musiałem znaleźć wysokość zarówno paska nawigacyjnego, jak i paska kart, aby uzyskać odpowiednią wysokość. Dodałem kod do mojego pierwotnego wpisu. – kkSlider

2

Nie jestem pewien, co się dokładnie dzieje, ale może twój UIScrollView jest wyższy niż na ekranie? Możesz spróbować wydrukować rozmiar swojego UIView, aby określić, czy jest na granicach ekranu. Być może UIActivityIndicator znajduje się w centrum UIView (nie w centrum ekranu).

+0

Would not centrum granice UIView jest taka sama, jak na środku ekranu? – kkSlider

+0

NSLog dał mi, że CGRect self.view i self.scrollView to {{0, 0}, {320, 460}}. A self.view.center poprawnie drukuje (160, 230).Nie jestem pewien, co tu jest nie tak. – kkSlider

3

użyj spinner.center = self.scrollView.center; zamiast

próbować to

spinner.center = CGPointMake (CGRectGetMidX (self.bounds) CGRectGetMidY (self.bounds));

+0

Dzięki, ale już próbowałem i otrzymałem takie same wyniki. – kkSlider

4

SWIFT

miałem ten sam problem ze względu na pasku nawigacyjnym i pasku kart. Aby ustalić, należy umieścić następujący kod w swoim loadview() lub gdziekolwiek zadzwonić swój wskaźnik aktywności rozpocząć animowanie:

let navigationBarHeight = self.navigationController?.navigationBar.frame.height 
let tabBarHeight = super.tabBarController!.tabBar.frame.height 
YourActivityIndicator.center = CGPointMake(self.view.frame.size.width/2.0, (self.view.frame.size.height - navigationBarHeight! - tabBarHeight)/2.0) 
0

centrum Położony w viewDidLayoutSubviews.

- (void) viewDidLayoutSubviews { 

self.myActivityIndicator.center = self.view.center;  

}

Powiązane problemy