私はここと同様のアプローチを使用してビューをマスクすることができました:iOSでUIViewをマスクする方法
しかし今、私はこのマスクされたビューでタッチを検出する必要があります。ボタンは、基本的にマスクを無視して、エリア内のGesture recognisers
タッチを検出します。bounds
ですから、マスクの画像から得られればCGPath
、タッチの扱いやすさはあると思います。CGPath
マスク画像から取得する方法について何か提案はありますか?
1463 次
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;
- その値に基づいて、YESまたはNOを返します
于 2012-12-18T13:08:29.950 に答える