2017-11-07 11 views
2

다음 코드는 iPhone에서 작동하지만 iPad에서는 원이 고르지 않습니다.Swift에서 원 UIView 만드는 방법

뷰를 두 장치의 원처럼 보이게하려면 어떻게해야합니까?

let width:CGFloat = UIScreen.main.bounds.width*0.0533  
label.layer.masksToBounds = true 
label.layer.cornerRadius = width/2 

enter image description here

+1

높이가 너비와 같지 않은 것 같아요. –

+0

또 하나의 이유는 버튼 폭이 반올림 된 정수 대신 십진수라는 것입니다. (예 : 33.33 px) –

+0

'label.layer.cornerRadius = min (label.frame.size.width/2, label.frame.size.height/2)', 원래 프레임이 아닌 경우에도 라운드가 매끄럽게됩니다. 광장. – holex

답변

5

완전한 원을 들어 높이를 유지해야하고 라벨 폭 동일. 이 코드를 사용하십시오.

let width:CGFloat = UIScreen.main.bounds.width*0.0533 
label.frame = CGRect(0,0,width,width)  
label.layer.masksToBounds = true 
label.layer.cornerRadius = width/2 
2

UIView를 원으로 표시하려면 몇 가지 방법이 있습니다.

  • 세트는 너비/높이의 절반 (가장 일반적인 방법)에 모서리 반경

는 미리보기의 높이/너비를 알 수없는 경우. 슈퍼 뷰 클래스에서 layoutSubviews() 함수를 오버라이드하거나 뷰 컨트롤러에서 func viewDidLayoutSubviews() 함수를 단순히 오버라이드하고 직접 코너 반경을 설정할 수 있습니다.

override func layoutSubviews() { 
    super.layoutSubviews() 
    label.layer.cornerRadius = label.frame.size.width/2 
} 

true로에 UIView의 레이어의 masksToBounds 속성을 설정하는 것을 잊지 마십시오.

  • 세트 마스크 층

마스크 층 지어 경로를 지정한다. 레이어의 프레임은 뷰의 크기가 변경 될 때마다 업데이트되어야합니다.

  • 반올림 이미지

당신은 이미지를 처리하는 경우도있는 UIImageView에 표시하기 전에 이미지 자체를 반올림 고려할 수 있습니다 - 성능 현명한 더 빨리 이전 옵션보다 방법이 될 수있다 .