UIButton 의 터치 영역을 확장하는건 생각보다 자주 필요한 기능입니다.


예를 들면 디자이너가 10x10 크기의 이미지를 주고 버튼을 만들기 위한 가이드를 주면,

버튼을 만들고 좌표를 잡고 10x10 크기의 이미지를 넣게 되면 터치 영역이 10x10 밖에 안되서 사용이 거의 불가합니다.


디자이너가 투명영역 크기까지 잡아서 30x30 사이즈 안에 10x10 이미지를 넣어서 주면, 

터치 영역이 30x30이 될텐데 거기까지 고려해주는 디자이너는 찾기 어렵... 또는 개발자가 알아서 잘 해줘요 라고 하기도 하죠.


암튼 그래서 필요한 기능.


보통 개발 할 때 당연히 구글에 검색을 하면 이런 저런 방법이 많이 나오는데

제가 선택한 방법은 터치 영역을 확대 해버리는 방식입니다.


http://stackoverflow.com/questions/808503/uibutton-making-the-hit-area-larger-than-the-default-hit-area



여기 보면 중간에 - (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event 를 활용하는 겁니다.

실제 자기 자신의 크기에 마진 크기를 추가해서 터치 영역을 반환하기 때문에 더 큰 터치 영역 확장이 됩니다.



간단히 정리해보면 아래와 같은 Custom Class 를 만들어서 Storyboard 에서 지정해주기만 하면 됩니다.



ExpandTouchButton.h

#import <UIKit/UIKit.h>


@interface ExpandTouchButton : UIButton


@end



ExpandTouchButton.m

#import "ExpandTouchButton.h"


@implementation ExpandTouchButton


- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

{

    CGFloat margin = 15.0;

    CGRect area = CGRectInset(self.bounds, -margin, -margin);

    return CGRectContainsPoint(area, point);

}


@end


끝.


+ Recent posts