1

ここに画像の説明を入力してください

キューブは6つのCALayerで構成されており、これらが1つの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座標が高い側)のみが選択されていることを確認するにはどうすればよいですか?

4

1 に答える 1

0

側面のプレゼンテーション層で hitTest メソッドを使用してみましたか? 別名:

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

考え?

于 2012-08-26T06:16:25.337 に答える