2013-05-11 2 views
0

У меня есть UIView, которые имеют CALayer маску:CALayer containsPoint с маской не работает

// 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; 
} 

Помощь, пожалуйста?

ответ

0

В моей книге представлены два предложения. Если вы знаете ограничивающий путь рисования маски, вы можете использовать CGPathContainsPoint. Или, если слой, о котором идет речь, прозрачен снаружи и непрозрачен внутри, вы можете проверить пиксель в месте, где находится, чтобы увидеть, прозрачен он или нет.

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

Прокрутите вниз до раздела "Хит-тестирование для рисунков".

Смежные вопросы