2012-12-18 3 views
3

나는 여기와 비슷한 접근법을 사용하여 뷰를 마스크 할 수있었습니다 : How to mask UIViews in iOS 하지만이 마스크 된 뷰에서 터치를 감지해야합니다. Gesture recognisers 버튼은 기본적으로 마스크를 무시하고 bounds 영역에서 터치를 감지합니다. 그래서 내 마스크 이미지에서 CGPath을 얻을 수 있다면 터치를 다루는 것이 쉬울 것이라고 생각합니다. 마스크 이미지에서 CGPath을 얻는 방법에 대한 제안이 있으십니까?알파 채널이있는 이미지에서 CGPath를 얻을 수 있습니까?

답변

2

당신은 UIGestureRecognizer의 대리자를 설정할 수 있습니다 및 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

1보다 우선합니다. 인식기의보기

- (CGPoint)locationInView:(UIView *)view

2 터치의 위치를 ​​가져옵니다. 해당 위치에서 이미지의 알파 채널을 찾으십시오. 이를 위해이 코드를 사용하십시오 (효율성을 위해 투명 값을 전체 이미지에 대해 미리 계산하여 버퍼에 저장하므로 매번 알파 버퍼를 복사 할 필요가 없습니다). 단일 픽셀을했다.이 post 보면, 한 번에 전체 이미지를 수행하는 방법을 참조하십시오.

unsigned char pixelData[1] = {0}; 
CGContextRef context = CGBitmapContextCreate(pixelData, 1, 1, 8, 1, NULL, kCGImageAlphaOnly); 
UIGraphicsPushContext(context); 
[im drawAtPoint:CGPointMake(-point.x, -point.y)]; 
UIGraphicsPopContext(); 
CGContextRelease(context); 
CGFloat alphaChannel = pixel[0]/255.0; 
BOOL transparent = alphaChannel < 0.01; 
그 값을 바탕으로
  • , YES 반환
      또는 아니오
  • +0

    고마워요, 지금은이 방법을 고수 하겠지만 CGImageRef에서 CGPath를 얻을 수 있다면 궁금합니다. 답변을 표시하지 않더라도 괜찮 으면 좋겠어요. 아직 허용 된 투표까지해라. – dariaa

    +0

    어떤 종류의 가장자리 추출 알고리즘을 사용하지 않는다면 상자 밖에서도 사용할 수 있다고 생각하지 않습니다. 그리고 그때조차도 CGPath는 근사치 일뿐입니다. – mprivat

    관련 문제