0

CALayer マスクを持つ UIView があります。

// Getting the right mask image
UIImage *myimage = [UIImage imageNamed:[NSString stringWithFormat:@"img%d", imageIndex]];

// Scaling image to fit UIView
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
[myimage drawInRect:self.bounds];
myimage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[self.layer setMasksToBounds:YES];

// Setting mask
UIImage *_maskingImage = myimage;
CALayer *_maskingLayer = [CALayer layer];
_maskingLayer.frame = self.bounds;
[_maskingLayer setContents:(id)[_maskingImage CGImage]];
[self.layer setMask:_maskingLayer];

ユーザーが後で (UILongPressGestureRecognizer *) UIView を短く押すと、ユーザーが UIView レイヤー マスクをタップた場合にアクションを実行したいだけです (今のところ、containsPoint は常に YES を返します)。

// Object is a UIView
CALayer *layer = [Object.layer mask];

// Sender is a UILongPressGestureRecognizer
location2 = [sender locationInView:Object];

// The position is correct
NSLog(@"%@", NSStringFromCGPoint(location2));

if ([layer containsPoint:location2]){
     NSLog(@"HELLO WORLD!");
     return;
}

助けてください?

4

1 に答える 1

0

私の本は2つの提案をしています。マスク描画の境界パスがわかっている場合は、 を使用できますCGPathContainsPoint。または、問題のレイヤーが外側が透明で内側が不透明である場合は、タップした位置のピクセルを調べて、透明かどうかを確認できます。

http://www.apeth.com/iOSBook/ch18.html#_hit_testing

「図面のヒット テスト」セクションまでスクロールします。

于 2013-05-11T23:20:01.917 に答える