2015-12-28 13 views
5

Staram się, aby mój imageView był kołem, ale wciąż wychodzi jako diament. Myślałem, że ten kod będzie działać, ale to nie jest:Circular ImageView wychodzi jako diament

profilePic.layer.cornerRadius = profilePic.frame.width/2 
    profilePic.clipsToBounds = true 
+1

Wysokość i szerokość widoku obrazu powinny być takie same. wtedy będzie wyglądać jak krąg –

+0

są one takie same i mam proporcje 1: 1 w storybooku. – cb428

+0

Użyj profilePic.layer.masksToBounds = YES; –

Odpowiedz

1

Spróbuj kod w

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    profilePic.layer.cornerRadius = profilePic.frame.width/2 
    profilePic.clipsToBounds = true 
} 
+2

przepełnienie stosu nie pozwala mi zaakceptować twojej odpowiedzi, ale to działało - dziękuję! – cb428

+1

Również ten sam problem wcześniej. Myślę, że układ obrazu nie został ustawiony prawidłowo jako autolayout w viewdidload. i nie możesz zaakceptować, ponieważ ktoś oznaczy go negatywnymi głosami. – jay

+1

viewWillLayoutSubviews wywoła wiele czasu, aby uniknąć sytuacji, które można umieścić w następujący sposób viewDidLoad również {niech delayTime = dispatch_time (DISPATCH_TIME_NOW, Int64 (0,1 * Podwójne (NSEC_PER_SEC))) dispatch_after (delayTime, dispatch_get_main_queue()) { profilePic.layer .cornerRadius = profilePic.frame.width/2 profilePic.clipsToBounds = true }} – jay

0

Ręczne wdrożenie init(coder aDecoder: NSCoder!) dodając go do kodu poniżej destinationViewController.

zainicjować ty ImageView jak pod

init(coder aDecoder: NSCoder!) { 
    super.init(coder: aDecoder) 
    profiePic = [[UIImageView alloc]init]; 
    profilePic setFrame : CGRectMake ("Set Your Control's Frame here"); 
    profilePic.layer.cornerRadius = profilePic.frame.width/2 
    profilePic.clipsToBounds = true 
} 

Dostaniesz swój wynik pragnienie.

0

Działa to dla mnie

profilePicImageView.layer.cornerRadius = profilePicImageView.frame.size.height/2 
profilePicImageView.layer.masksToBounds = false 
profilePicImageView.clipsToBounds = true 
profilePicImageView.layer.borderWidth = 0 
0

użyć tego samego kodu w viewDidLayoutSubviews metody lub viewDidAppear metody. Faktycznie, jak na widoku cyklu życia, sposoby są realizowane w następujący sposób init, loadView, viewDidLoad, viewWillAppear, viewWillLayoutSubViews, następnie autolayout stosowane ograniczenia (liczba ograniczeń autoLayout trzeba, że ​​dużo czasu metoda ta układ się nazywa), a następnie, viewDidLayoutSubviews i na koniec viewDidAppear.

Z Twojego pytania wynika, że ​​umieszczasz swój kod w dowolnej metodzie, zanim zostaną zastosowane ograniczenia autolayout. Dlatego nie uzyskujesz odpowiedniej szerokości widoku i zamiast diamentu zamienia się w brylant.

1

Możesz nie uzyskać idealnego koła w każdym urządzeniu, spróbuj zmienić wartość 2.0 na inną w pobliżu wartości dla urządzeń o różnych rozmiarach.

-(void)viewDidLoad { 
    self.profilePic.layer.cornerRadius = self.profilePic.frame.size.width/2.0f; 
    self.profilePic.clipsToBounds = YES; 
} 
+0

Dziękuję Lucasowi za sugestię edycji, moja pierwsza odpowiedź tutaj. Doceniam twoją pomoc. –