2012-02-10 3 views
1

я рисую линию этого кода:Получить точки касания в CAShapelayer

- (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 метод я не получаю, что прикосновение принадлежит моему пути линии или нет.

+0

Я думаю, это из-за смещения содержимого scrollview. – Vignesh

+0

Вы делаете CGAffineTransformMakeTranslation (-textLayer.position.x, - textLayer.position.y) ?. На самом деле это работает для меня без трансформации. – Vignesh

+0

что код для меня пишу? – PJR

ответ

3

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

-(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

Я пробовал это, но он не работает. когда я прикасаюсь к линии, ничего не происходит. – PJR

+0

Не учитывается ширина линии – jjxtra

0

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

Смежные вопросы