탭 감지 영역을 제한하는 "간단한 방법"은 없습니다. 당신은 완전히 정확합니다 : 버튼의 탭 감지 영역은 직사각형이며, 그것이 전부입니다. 따라서 버튼의 간단한 탭 감지를 사용하여 작업을 수행 할 수 없습니다. 당신은 탭을 스스로 발견하고, 어디 있는지 살펴보고, 그 지식을 사용하여 원의 그림이 사용자가 입력 한 드럼의 부분을 결정하는 데 대한 지식을 얻게됩니다.
UITapGestureRecognizer는 사용자가 도청 한 위치와 그 위치를 확인합니다.
UIBezierPath에서 모양과 관련하여 히트 감지를 수행하는 방법을 찾으십시오 (예 : 원,이 원 안에있는 점).
가장 좋은 방법은 수정 될 수 내장 된 히트 테스트, 즉 당신이 지점이 내부 원 안에있는 경우에만 YES 돌아 pointInside:withEvent:
을 무시하는있는 UIButton 또는 UIView의 서브 클래스, 예를 들면 :
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
return [p containsPoint:point];
}
그게 "간단하다"고 생각합니다. 나는 두려워합니다.