4

私はここと同様のアプローチを使用してビューをマスクすることができました:iOSでUIViewをマスクする方法 しかし今、私はこのマスクされたビューでタッチを検出する必要があります。ボタンは、基本的にマスクを無視して、エリア内のGesture recognisersタッチを検出します。boundsですから、マスクの画像から得られればCGPath 、タッチの扱いやすさはあると思います。CGPathマスク画像から取得する方法について何か提案はありますか?

4

1 に答える 1

2

のデリゲートを設定してUIGestureRecognizerオーバーライドできます- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

1。レコグナイザーのビューでタッチの位置を取得します

- (CGPoint)locationInView:(UIView *)view

2。その場所で画像のアルファチャネルを見つけます。そのためには、このコードを使用します(効率を上げるために、画像全体の透明な値を事前に再計算し、それらをバッファーに保存して、毎回アルファバッファーをコピーする必要がないようにします。ここでは単純にしました。画像全体を一度に実行する方法を確認したい場合は、この投稿を参照してください。

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;
  1. その値に基づいて、YESまたはNOを返します
于 2012-12-18T13:08:29.950 に答える