CAShapeLayer hitTest touch - PullRequest
       33

CAShapeLayer hitTest touch

1 голос
/ 13 февраля 2011

Я не могу понять, почему CAShapeLayer не отвечает на hitTest

Эта функция всегда идет к // прикосновениям снаружи

Как обнаружить касание на CAShapeLayer?

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{   

    currentPoint = [[touches anyObject] locationInView:self];

    for (CAShapeLayer *layer in self.layer.sublayers) {    

        if(layer == shapeLayer) {

            if([layer hitTest:currentPoint])
            {
                // touche is on the layer
            }
            else {
                // touche is outside
            }

        }

    }       

}

1 Ответ

6 голосов
/ 14 февраля 2011

После двухдневного удара головой я смог создать этот странный код и похоже, что он работает!

Целью было запустить тест CAShapeLayer.CAShapeLayer движется по экрану, поэтому форма не в постоянном месте.Попробовать CGPath currentPoint непросто.

Не стесняйтесь добавлять любые входные данные ...

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{   

    CGPoint p = [[touches anyObject] locationInView:self];

    CGAffineTransform transf = CGAffineTransformMakeTranslation(-shapeLayer.position.x, -shapeLayer.position.y); 

    if(CGPathContainsPoint(shapeLayer.path, &transf, p, NO)){    

       // the touch is inside the shape  
    }   

}
...