ここでは、ボタンタップでボタンアクションイベントのタッチを取得したい-B
画像が(画像の表示領域で)タップされると、タップジェスチャメソッドが呼び出されます
しかし、問題は画像がボタン上にあり、ボタンの一部を覆っているということです。その覆われた部分でボタンアクションイベントを実行したいのです-A
私は試しましたが、覆われた部分でボタンアクションを取得できませんでした:(
ここでは、ボタンタップでボタンアクションイベントのタッチを取得したい-B
画像が(画像の表示領域で)タップされると、タップジェスチャメソッドが呼び出されます
しかし、問題は画像がボタン上にあり、ボタンの一部を覆っているということです。その覆われた部分でボタンアクションイベントを実行したいのです-A
私は試しましたが、覆われた部分でボタンアクションを取得できませんでした:(
その部分に透明なボタンを置きます
アップデート
-(void)singleTapImageview:(UITapGestureRecognizer *)gesture
{
NSLog(@"single-tap");
CGPoint touchLocation = [gesture locationInView:self.imageViewParent];
float x = touchLocation.x;
float y = touchLocation.y;
//Using gesture recogniser you can get the current position of touch
UIImage* image = imageViewParent.image;
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
UInt8 *pixels = (UInt8 *)CFDataGetBytePtr(data);
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 1);
CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [UIColor redColor].CGColor);
int index = ((x + (y * (int)image.size.width)) * 4) + 3;
CGFloat alpha = pixels[index];
if (alpha == 0)
{
// call button acton
}
}
画像部分と既存のボタンの両方に重なる新しい透明なボタンを追加して、フレームを作成できます
CGRectMake(button.frame.origin.x, button.frame.origin.y, button.frame.size.width, button.frame.size.height);
そのようにボタンを画像と重ねないようにしてください。ひどいですね。
より長期的な解決策として、UXデザイナーやグラフィックアーティストと友達になることをお勧めします。運が良ければ、それは同じ人かもしれません。
重なり合うボタンのヒットテスト関数を作成することで、問題を解決できます。
ヒットテストでは、座標をチェックして、どのボタンがヒットしたかを判断する必要があります。