У меня проблема с обнаружением, на который нажимается 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. Когда пользователь нажимает на слой, мне нужно знать, на каком слое они нажали, установив индекс в соответствующее значение в массиве. Заранее спасибо!
Не положительный, но я думаю, вы должны вычислить clickedOn попадания тестирования 'self.layer.presentationLayer', не 'self.layer' – danh
@ danh Вот оно! Мне также пришлось изменить superLayer на presentationLayer. Сделайте этот ответ, и я с радостью пометьте его правильно :) Спасибо! –