2012-11-06 1 views
10

는 버튼의 배경 이미지의 크기를 변경하지 않고배경 이미지의 크기가 증가하지 않고 (사용자 정의 유형)있는 UIButton의 tapable (타격) 면적을 증가하는 방법

해봤있는 UIButton의 tapable 면적을 증가시킬 수있다 :

[shareButton setContentEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)]; 
이들의
[shareButton setImageEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)]; 

&

하지만 아무도 일하지.

제안 사항을 알려주십시오. 있는 UIButton의 수퍼

답변

14

유형 buttonWithType:UIButtonTypeCustom의있는 UIButton을 확인하고 거기에 작은 크기의 이미지를 지정합니다.

이미지를 배경 이미지로 설정하지 마십시오. 그렇지 않으면 버튼이 커집니다. 대신 기본 이미지로 설정하십시오.

예를 들어 표시 가능한 영역을 64x64 크기로 설정하고 32x32 크기의 이미지를 표시하려면 단추 크기가 64x64이고 이미지 크기가 32x32가되어야합니다. 프로그래밍

:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

// use an image with the desired size (for example 32x32) 
[button setImage: [UIImage imageNamed: @"buttonIcon.png"] forState: UIControlStateNormal]; 
// just set the frame of the button (64x64) 
[button setFrame: CGRectMake(xPositionOfMyButton, yPositionOfMyButton, 64, 64)]; 

인터페이스 빌더 :

Interface Builder example

3

서브 클래스, 그리고 그러나 hitTest를 오버라이드 (override) : withEvent :

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGPoint buttonPoint = [self convertPoint:point toView:_button]; 
    if ([_button pointInside:buttonPoint withEvent:event]) { // you may add your requirement here 
     return _button; 
    } 
    return [super hitTest:point withEvent:event]; 
} 
+0

와 예가 아닌가? 수동으로 타격 영역을 설정하는 버튼의 모든 메소드 또는 속성? –

+3

@crishoj 그건 훨씬 더 나빠! – devios1

+0

@crishoj 사실이 아니므로 버튼을 서브 클래 싱하고 pointInside를 재정의 할 수 있습니다. – Andy

3

함께 자동 레이아웃에 당신이 좋아하는 디자인 접근 방식 (인터페이스 빌더/비디오 형식 언어)를 사용하고 필요한 크기로있는 UIButton 레이아웃 . 제목이나 이미지를 내용으로 설정하고 탭 가능한 영역의 크기가 투명한 이미지를 배경 이미지로 사용하십시오. 있는 UIButton를 하위 클래스라는보다 다른 방법은 여기

_button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[_button setImage:[UIImage imageNamed:@"contentImage"] forState:UIControlStateNormal]; 
[_button setBackgroundImage:[UIImage imageNamed:@"transparentImage"] forState:UIControlStateNormal]; 

_button.layer.borderWidth = 1

Example http://i59.tinypic.com/wwnt5u.png

관련 문제