识别3d立方体特定侧面的触摸

时间:2012-08-26 00:18:24

标签: iphone ios calayer uitouch catransformlayer

enter image description here

立方体由6个CALayers组成,然后添加到单个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");
    }

但是立方体似乎被映射到2D空间:当我触摸第1侧时,不仅可以识别侧面1,还可以识别它背后的侧面(例如侧面4)。

如何确保只选择靠近用户的一侧(更高的z坐标)?

1 个答案:

答案 0 :(得分:0)

您是否尝试在双方的表示层使用hitTest方法? 也就是说:

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

思想?