2014-01-12 4 views
2

Tabla 드럼 앱을 만들려고합니다 (테이블은 함께 묶인 작은 핸드 드럼 쌍입니다). 이렇게하려면 드럼의 각 섹션을 다른 드럼 위에 겹쳐서 버튼을 사용하고 싶습니다. 그래서 같이 :겹치는 원형 버튼 및 히트/탭 테스트

enter image description here

나는 버튼의 원형 이미지를 사용하여 시도했지만 주변 지역은 사각형이다. 즉, 사용자가 녹색 원의 일부를 칠 때 주황색 원에 대한 소리가 재생됩니다 (나는 의미가 있음을 의미합니다).

사용자가 녹색 패드를 누르고 오렌지 패드를 두드리면 주황색 패드의 사운드가 재생 될 때 녹색 패드의 사운드가 재생되도록하려면 어떻게합니까?

답변

4

탭 감지 영역을 제한하는 "간단한 방법"은 없습니다. 당신은 완전히 정확합니다 : 버튼의 탭 감지 영역은 직사각형이며, 그것이 전부입니다. 따라서 버튼의 간단한 탭 감지를 사용하여 작업을 수행 할 수 없습니다. 당신은 탭을 스스로 발견하고, 어디 있는지 살펴보고, 그 지식을 사용하여 원의 그림이 사용자가 입력 한 드럼의 부분을 결정하는 데 대한 지식을 얻게됩니다.

UITapGestureRecognizer는 사용자가 도청 한 위치와 그 위치를 확인합니다.

UIBezierPath에서 모양과 관련하여 히트 감지를 수행하는 방법을 찾으십시오 (예 : 원,이 원 안에있는 점).

가장 좋은 방법은 수정 될 수 내장 된 히트 테스트, 즉 당신이 지점이 내부 원 안에있는 경우에만 YES 돌아 pointInside:withEvent:을 무시하는있는 UIButton 또는 UIView의 서브 클래스, 예를 들면 :

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    UIBezierPath* p = [UIBezierPath bezierPathWithOvalInRect:self.bounds]; 
    return [p containsPoint:point]; 
} 

그게 "간단하다"고 생각합니다. 나는 두려워합니다.