2014-10-06 2 views
6

내 UIButton의 히트 영역을 늘리려고합니다. 스토리 보드의 중앙에 UIButton이있는 새로운 Xcode 프로젝트가 있습니다. 이 버튼은 콘센트와 동작으로 내 View Controller에 연결됩니다. 프로그래밍 방식으로 버튼 제목을 변경할 수 있으며 버튼을 누르면보기의 배경을 변경하는 작업을 재미로 만들었습니다. 그래서 나는 모든 것이 연결되어 있고 작동한다는 것을 압니다.xcode iOS 증가 UIButton 히트 영역

온라인에서 읽은 것부터는 작동하지만 그렇지 않습니다.

[버튼 세트 프레임 : CGRectMake (button.frame.origin.x, button.frame.origin.y, -64, -64)];

의견이 있으십니까? 나는 음수 마진없이 시도했지만 그 중 하나는 작동하지 않습니다. BTW, 나는이 질문을 묻는 많은 장소를 시도했다 그러나 작동하지 않는다. 도와 줘서 고마워. 또한 UIButton을 하위 클래스로 만들면 문제가 생길 수 있다고 들었습니다.

업데이트 : 만들고자하는 UIButton은 배경색을 가지고 있으며 특정 크기입니다. 그 크기를 동일하게 유지하고 버튼 모양을 왜곡시키지 않고 주위의 히트 영역을 늘리고 싶습니다.

+2

방금 ​​클릭하고의 모서리를 드래그 할 수 없습니다 일단 내가이 도움이 당신을 희망하지만, 이미지를 확인 찾고있는하지 않도록 무엇을 생각 스토리 보드 내의 UIButton 크기를 늘리십시오? – user3746428

+0

@ user3746428 버튼 크기를 늘리면 버튼에 설정된 배경색도 증가합니다. 버튼이 현재와 똑같아 보이길 원하지만 주변의 히트 영역을 늘리고 싶습니다. 이 문제에 대해 언급 해 주셔서 감사 드리며, 제 질문을 업데이트하겠습니다. –

+0

@ JimBak UIView에 UITapGestureRecognizer를 만들고 탭 근처에 있는지 확인할 수 있습니다. – WMios

답변

2

배경색이나 이미지를 왜곡시키지 않고 히트 영역을 늘리려면 그냥 분리하는 것이 가장 쉽습니다. 배경색이없고 UIView (또는 UIImage 등) 위에 비주얼을 제공하는 명확한 UIButton이 있어야합니다. 그렇게하면 UIButton의 프레임에 원하는 것을 무엇이든 할 수 있으며 다른 UIView에도 같은 변형을 적용하지 않으면 비주얼에 영향을 미치지 않습니다.

해당 코드 줄이 작동하지 않는 이유는 CGRectMake의 세 번째와 네 번째 요소는 여백이 아니므로 크기가 음수입니다. 음수 높이와 너비를 가질 수 없습니다. 변경 또는 여백이 아닌 원하는 최대 크기로 넣으십시오 (예 : 너비를 100으로 20 줄이려면 80을 입력하십시오).

+1

설명해 주셔서 감사합니다. 나는 이미지 위에 버튼을 놓고 싶지 않고 자동 레이아웃을 관리해야한다. 나는 단순히 특정 픽셀 수만큼 단추의 히트 영역을 늘릴 수있는 쉬운 방법이 없다는 것을 믿을 수 없다. –

2

하위 클래스 UIButton에서 backgroundRectForBounds 메서드를 구현합니다.

원하는 터치 영역 크기로 프레임을 확장 한 다음 인세 트를 추가하여 배경 경계를 줄입니다. 여기

- (CGRect)backgroundRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, -50, -50); 
} 

상세 정보 : https://developer.apple.com/library/ios/documentation/uikit/reference/uibutton_class/index.html#//apple_ref/occ/instm/UIButton/backgroundRectForBounds :

+0

나는 이것을 시도했는데, 그렇지 않기 때문에 노력해야한다. CGFloat margin = 120.0; CGRect 영역 = CGRectInset (button.bounds, -margin, -margin); [button backgroundRectForBounds : area]; –

+0

backgroundRectForBounds 메서드에 중단 점을 추가하여 호출되는지 확인합니다. – dfmuir

+0

예. 호출 중입니다. –

5

난 당신이 단지 같은 지역에 배경 색상이나 다시 땅에 이미지를 제한하는 같은 버튼을 사용하여 터치 영역을 높이려는 생각?

제 생각에 인터페이스 빌더에서는 그렇게 할 수 없습니다. 그러나 레이어를 사용하여 코딩 할 수 있습니다. 버튼

CALayer *buttonlayer=[CALayer layer]; 

    buttonlayer.frame=CGRectMake(50 , 50, 50, 50); // set the frame where you want to see the background color or background image to be visible in your button 

    buttonlayer.backgroundColor=[[UIColor colorWithPatternImage:[UIImage imageNamed:@"yourimage.png"] ] CGColor]; // if u want image (but remember the image size must same as your layer frame it may look bad if the image bounds does not mach your layer bounds, because you are setting color not image) 


    // to set color (donot use if you want image, use colorWithPatternImage to set image color) 
    buttonlayer.backgroundColor=[[UIColor graycolor] CGColor]; // if you want only color 

    // you can add round rects to the button layer 

    buttonlayer.cornerRadius=2.5f; 

    [yourbutton.layer addSublayer:buttonlayer]; 

걸릴 콘센트 난 당신이 enter image description here