2015-05-12 8 views
7

Próbuję napisać globalną funkcję, która dodaje wskaźnik aktywności do dowolnego widoku (głównie viewViews) przez wywołanie takiej funkcji.Zdobądź centrum dowolnego UIView w Swift

Funkcja mam teraz składa się z:

public func addActivityIndicatorToView(activityIndicator: UIActivityIndicatorView, view: UIView){ 

    //activityIndicator configuration ... 
    activityIndicator.center = view.center 
    view.addSubview(activityIndicator) 
    activityIndicator.startAnimating() 
} 

Ale nie dostać środek widoku z jakiegoś powodu.

Próbowałem również różnych rozwiązań w SO i Google, ale żaden z nich nie działał do tej pory.

Czy istnieje sposób, aby uzyskać punkt środkowy i ustawić activityIndicator do dowolnego UIView?

+0

Jeśli żadne z rozwiązań w @EmilioPelaez pracy odpowiedzi, sugeruję sprawdzenie rozmiaru widoku. W jakiej metodzie ustawiasz środek wskaźnika aktywności? – ABakerSmith

+0

W klasie globalnej, która zawiera wszystkie metody udostępnione w projekcie – Phillip

+0

Możesz ustawić pozycję 'activityIndicator' zanim ramka widoku zostanie poprawnie skonfigurowana (na przykład w' viewDidLoad') ... – ABakerSmith

Odpowiedz

11

miałem odtworzenia problemu łatwo (patrz mój komentarz). Myślę, że to może być problem z układem automatycznym. Więc możesz użyć ograniczeń zamiast obliczyć pozycję?

func addActivityIndicatorToView(activityIndicator: UIActivityIndicatorView, view: UIView){ 

    self.view.addSubview(activityIndicator) 

    //Don't forget this line 
    activityIndicator.setTranslatesAutoresizingMaskIntoConstraints(false) 
    view.addConstraint(NSLayoutConstraint(item: activityIndicator, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)) 
    view.addConstraint(NSLayoutConstraint(item: activityIndicator, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0)) 


    activityIndicator.startAnimating() 


} 

Nadzieję, że może pomóc.

+0

Świetnie! Dzięki twojemu komentarzowi i temu niesamowitemu kawałkowi kodu.To działa dobrze teraz – Phillip

+0

Niesamowita odpowiedź !!! Działa dla ja również –

+0

To zdecydowanie bardziej uniwersalne rozwiązanie niż inne, które używają view.center – dorsz

5

Właściwość center jest względna w stosunku do podglądu widoku. Jeśli więc ramka twojego widoku to {10, 10, 20, 20}, center będzie {20, 20}.

Zgaduję, że chcesz wyśrodkować activityIndicator w view.

Można zrobić

activityIndicator.center = CGPointMake(view.width/2, view.height/2) 
+0

Próbowałem już tego, i niestety to idzie w dolnym prawym rogu superview :( – Phillip

7

Swift 3:

activityIndicator.center = CGPoint(x: view.height/2, y: view.width/2) 

lub można spróbować:

activityIndicator.center = view.center 
Powiązane problemy