1

私はこのコードで線を引いています:

 - (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メソッドでは、タッチがラインパスに属しているかどうかがわかりません。

4

2 に答える 2

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  
}   

}
于 2012-02-10T08:41:28.613 に答える
0

パスが線だけの場合にタッチポイントを取得できるかどうかはわかりません。フィギュアならその点がわかると思います。ポイントをレイヤーに変換する必要があると思います。タッチポイントはUIViewにあります。「CAShapeLayerとタッチポイント」を使用するコードを書いています。多分それはあなたを助けることができます。https://github.com/pyanfield/WSChart/blob/master/WSCharts/WSPieChartWithMotionView.m

于 2012-02-14T07:45:40.247 に答える