2016-07-12 3 views
0

У меня проблема с обнаружением, на который нажимается CALayer, поскольку эти CALayers имеют постоянную CABasicAnimation, перемещающую позиции x и y.Как определить, на какой CALayer был нажат?

Мой текущий код выглядит следующим образом:

-(void)mouseUp:(NSEvent *)theEvent 
{ 
    CGPoint pointInView = NSPointToCGPoint([self convertPoint:[theEvent locationInWindow]fromView:nil]); 
    CALayer* clickedOn = [(CALayer*) self.layer hitTest:[self.layer convertPoint:pointInView toLayer:self.layer.superlayer]]; 
    int selectedContact = -1; 
    for (int i = 0; i < [contactLayers count]; i++) { 
     CALayer* presentationLayer = [contactLayers[i] presentationLayer]; 
     if (presentationLayer == clickedOn) { 
      selectedContact = i; 
      break; 
     } 
    } 

    if(selectedContact == -1) 
     return; //no contact selected; 

    CALayer* selectedContactLayer = contactLayers[selectedContact]; 
    [selectedContactLayer removeFromSuperlayer]; 
} 

contactLayers является NSMutableArray, содержащий все возможные CALayers пользователь может нажать на кнопку.

Каждый раз, когда это выполняется, «i» всегда, кажется, остается -1. Я использую presentationLayer, так как CALayers применяет CABasicAnimation. Я также пробовал modelLayer, но это работает только если вы нажмете на исходное местоположение каждого слоя.

Итак, просто recap: у меня есть NSMutableArray CALayers, который применяется с CABasicAnimation, этот массив называется contactLayers. Когда пользователь нажимает на слой, мне нужно знать, на каком слое они нажали, установив индекс в соответствующее значение в массиве. Заранее спасибо!

+1

Не положительный, но я думаю, вы должны вычислить clickedOn попадания тестирования 'self.layer.presentationLayer', не 'self.layer' – danh

+0

@ danh Вот оно! Мне также пришлось изменить superLayer на presentationLayer. Сделайте этот ответ, и я с радостью пометьте его правильно :) Спасибо! –

ответ

1

Compute 'clickedOn' попадание тестирование 'self.layer.presentationLayer', а не 'self.layer'

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