How can I make a CALayer clickable?

Я использую CATransformLayer, чтобы создать группу слоев и анимировать их с 3D-перспективой, чтобы сделать куб (что-то вроде этого)

CATransformLayer с подслоями

Как лучше всего добавить 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];

    }


}
Другие вопросы по тегам