【问题标题】:Recognize touch on specific side of 3d cube识别 3d 立方体特定侧的触摸
【发布时间】:2012-08-26 00:18:24
【问题描述】:

立方体由 6 个 CALayer 组成,然后将它们添加到单个 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 坐标)?

【问题讨论】:

    标签: iphone ios calayer uitouch catransformlayer


    【解决方案1】:

    您是否尝试过在侧面的表示层上使用 hitTest 方法? 又名类似的东西:

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

    想法?

    【讨论】:

    • 不,每次点击它仍然会“检测”2 个侧面
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多