Получить Touch Point в CAShapelayer - PullRequest
       5

Получить Touch Point в CAShapelayer

1 голос
/ 10 февраля 2012

я рисую линию этим кодом:

 - (void) drawLine:(float)x :(float)y:(float)toX:(float)toY 
{
CAShapeLayer *lineShape = nil;
CGMutablePathRef linePath = nil;
linePath = CGPathCreateMutable();
lineShape = [CAShapeLayer layer];

lineShape.lineWidth = 1.0f;
lineShape.lineCap = kCALineJoinMiter;
lineShape.strokeColor = [[UIColor redColor] CGColor];


CGPathMoveToPoint(linePath, NULL, x, y);
CGPathAddLineToPoint(linePath, NULL, toX, toY);

lineShape.path = linePath;
CGPathRelease(linePath);

if(x != 0 && y != 0)
[myView.layer addSublayer:lineShape];

}

Теперь я хочу знать, когда моя линия соприкасается.как это возможно ?я использую

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

NSIndexSet *indexSet = [myView.layer.sublayers indexesOfObjectsPassingTest:^(id obj,        NSUInteger idx, BOOL *stop){
        return [obj isMemberOfClass:[CAShapeLayer class]];
    }];

    NSArray *textLayers = [myView.layer.sublayers objectsAtIndexes:indexSet];
    for (CAShapeLayer *textLayer in textLayers) {
        CGPoint p = [[touches anyObject] locationInView:myView];
        NSLog(@"touch x is :%f",p.x);

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

        if(CGPathContainsPoint(textLayer.path, &transf, p, NO)){    
            NSLog(@"touched..");
        }  
    }

}, но по методу CGPathContainsPoint я не получаю, что касание относится к моему пути линии или нет.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Следующий код работал для меня

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

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

if(CGPathContainsPoint(textLayer.path,nil, p, NO))
{    

    NSLog(@"touched");
    // the touch is inside the shape  
}   

}
0 голосов
/ 14 февраля 2012

не уверен, сможете ли вы получить точку касания, если путь является только линией.если это фигура, я уверен, что вы можете получить эту точку.Я думаю, может быть, вы должны преобразовать свою точку в свой слой.точка касания находится в вашем UIView.Я пишу код, который использует «CAShapeLayer и Touch Point».Может быть, это может помочь вам.https://github.com/pyanfield/WSChart/blob/master/WSCharts/WSPieChartWithMotionView.m

...