2016-07-04 2 views
0

저는 UIButton을 가지고 있으며 이미지를 원형으로 만들 수 있도록 배경 이미지의 UIImageView에 액세스하고 싶습니다. 나는 이미지 자체에 영향을 미칠 수 있음을 알고 있지만 더 우아하게 이것을하는 것을 선호합니다. 또한 백그라운드에서 UIImage를 가져 오기 위해 button.currentBackgroundImage 속성을 사용할 수 있다는 것을 알고 있지만보기 자체가 필요합니다. 보기가 완료되면이 코드를 사용하려고합니다.UIButton의 배경 이미지의 UIImageView에 액세스

buttonImageView.layer.cornerRadius = buttonImageView.frame.size.width/2; 
buttonImageView.clipsToBounds = YES; 

buttonImageView에 액세스하려면 어떻게해야합니까?

편집 : 인해 @ vhristoskov의 제안에,이 코드로 버튼 자체를 자르기 시도 :

self.button.layer.cornerRadius = self.button.frame.size.width/2; 
self.button.clipsToBounds = YES; 

그리고이 모양 만든 : 나는 것을 발견 디버깅 후

enter image description here

을 frame.size.width는 100이었을 때 46이었습니다. 그래서이 코드를 대신 사용해 보았습니다.

self.button.layer.cornerRadius = self.button.currentBackgroundImage.size.width/2; 
self.button.clipsToBounds = YES; 
,

그리고이 모양 제작 :

enter image description here

그리고, cornerRadius가 65으로 설정되고 있던이 시간을 그래서 실제로 내 문제는 내가 지금 올바른 폭을하지 않아도됩니다 것 같아 . 올바른 번호를 얻기 위해 어떤 자산에 액세스해야합니까? 있는 viewDidLoad에

[self.myButton setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal]; 

또는 이전, 당신은 다음 viewDidAppear에서 다음 호출 할 수 있습니다 :

if (self.myButton.subviews.count > 0 && [self.myButton.subviews[0] isKindOfClass:[UIImageView class]]) { 
    UIImageView *imageView = self.myButton.subviews[0]; 
    imageView.layer.cornerRadius = imageView.frame.size.width/2; 
    imageView.clipsToBounds = YES; 
} 

을하지만이 서브 뷰 순서이기 때문에 더 우아하지 않습니다 당신이 뭔가를 호출한다고 가정

+0

당신의있는 UIButton에 직접 동일한 코드를 적용 할 이유가 있습니까? – vhristoskov

+0

@vhristoskov hmmm 방금 시도한 결과 이상한 결과를 얻었습니다. 이미지가 이상하게 생겼습니다. 원하는 경우 제 질문에 대한 스크린 샷을 추가 할 수 있습니다. – multitaskPro

+0

이것은 좋을 것입니다.또한 IB (또는 단추 프레임을 설정하는 데 사용한 코드)에 구속 조건 이미지를 추가 할 수도 있습니다. – vhristoskov

답변

0

당신이 이미 알아 봤 듯이 문제는 버튼 크기입니다. 런타임에 버튼의 크기가 예상 한 값인지 확인하려면 제약 조건을 검토하십시오. 아래 예제에서 버튼은 수직 및 수평 가운데 맞춤과 고정 너비 및 높이를가집니다.

Button Constraints

제약 :

enter image description here

button.width == button.height을해야 완벽하게 원형 버튼을합니다. 이 조건이 충족되면 코드가 마법처럼 작동합니다 :

self.button.layer.cornerRadius = CGRectGetWidth(self.button.frame)/2; 
self.button.clipsToBounds = YES; 

enter image description here

+0

그래서 내 문제는 viewDidLoad에서 단추 폭을 얻으려고하는 것으로 밝혀졌으며 분명히 너비는 viewDidAppear에서만 유효합니다. 어쨌든 나는이 해결책을 받아 들일 것이다. 왜냐하면 그것이 나의 해결책의 요지를 담고 있기 때문이다. 모든 도움을 주셔서 감사합니다 :) – multitaskPro

0

UIButton의 구현의 상세이며, 언제라도 변경 될 가능성이 있습니다.

+0

UIButton에 실제로 서브 뷰가없는 것처럼 보입니다 :/ – multitaskPro

+0

하위 뷰는 viewDidAppear에 의해서만 추가되었지만 viewDidLoad 시간에는 아직 존재하지 않는 것으로 나타났습니다. 배경 이미지가 처음 설정되는시기에 따라 다를 수 있습니다. –

관련 문제