Распознать прикосновение к определенной стороне трехмерного куба
Куб состоит из 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");
}
Мысли?