Распознать прикосновение к определенной стороне трехмерного куба

Куб состоит из 6 слоев CALay, которые затем добавляются в один слой CATransformLayer. Этот transformLayer, а вместе с ним и куб, вращаются с помощью сенсорного ввода.

Проблема: я хочу иметь возможность распознать, к какой стороне куба прикоснулся пользователь.

Я пробовал этот код:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint location = [[touches anyObject] locationInView:self];

        if ([self.side1 containsPoint: [self.layer convertPoint:location toLayer:self.side1]]) {
            NSLog(@"Side 1");}
        if ([self.side2 containsPoint: [self.layer convertPoint:location toLayer:self.side2]]) {
            NSLog(@"Side 2"); }
        if ([self.side3 containsPoint: [self.layer convertPoint:location toLayer:self.side3]]) {
            NSLog(@"Side 3 "); }
        if ([self.side4 containsPoint: [self.layer convertPoint:location toLayer:self.side4]]) {
            NSLog(@"Side 4"); }
        if ([self.side5 containsPoint: [self.layer convertPoint:location toLayer:self.side5]]) {
            NSLog(@"Side 5"); }
        if ([self.side6 containsPoint: [self.layer convertPoint:location toLayer:self.side6]]) {
            NSLog(@"Side 6");
    }

Но куб, похоже, отображается в двухмерном пространстве: когда я касаюсь стороны 1, распознается не только сторона 1, но и сторона позади нее (например, сторона 4).

как я могу убедиться, что выбрана только та сторона, которая ближе к пользователю (более высокая координата z)?

1 ответ

Вы пробовали использовать метод hitTest на уровне представления сторон? иначе что-то вроде:

CALayer* touchedLayer = [[self.side4.presentationLayer hitTest:location] modelLayer];
if(touchedLayer!=nil){
   NSLog(@"Side 4");
}

Мысли?

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