How can I make a CALayer clickable?
Я использую CATransformLayer, чтобы создать группу слоев и анимировать их с 3D-перспективой, чтобы сделать куб (что-то вроде этого)
Как лучше всего добавить UIB-кнопку на одну из сторон этого куба? Я хотел бы иметь возможность получать события и доступ к нижней части из IBOutlet.
Я попытался создать UIView с кнопкой внутри него в моем XIB и вставить его слой в CATransformLayer, он появляется, но кнопка не активна. У меня такое ощущение, что это потому, что UIKit имеет дело с Touch / событиями, слои просто для рисования.
(кстати, я видел этот вопрос, но чувствую, что этот случай достаточно отличается, чтобы оправдать новый пост)
2 ответа
Корневое представление, на котором размещены все слои, получает все прикосновения к дереву слоев
там ты должен сделать
CALayer *touchedLayer = [self.rootLayer hitTest:touches.anyObject.locationInWindow];
из комментария: если вы хотите проверить во время анимации, задайте уровень презентации:
CALayer *touchedLayer = [self.rootLayer.presentationLayer hitTest:touches.anyObject.locationInWindow];
Спасибо Daij за подсказку, вот мое решение - был бы признателен за любые комментарии / улучшения
- (IBAction)viewTapped:(UITapGestureRecognizer *)sender
{
CGPoint location = [sender locationInView:sender.view];
CALayer *layer = [sender.view.layer hitTest:location];
BOOL contains = [self.btnPlay.layer.sublayers containsObject:layer];
if(contains)
{
[self.btnPlay sendActionsForControlEvents:UIControlEventTouchUpInside];
}
}