私はあなたのために簡単な質問があります。ShapeLayerのHitTestが私のために働いていない
私は枠を設定するshapeLayerを持っています。 次に、私はshapeLayer.pathに設定したUIBezierPathを使ってフレームコンテンツの中に形を描きます。
質問はどのようにして形状の内側のタップを真とし、形状の外を偽と検出するのですか?
私はクレイジーなもののすべての種類を試してきたが、どれも
-(Boolean) isPoint:(CGPoint)point InsideShape:(CSAbstractShapeLayer*) shapeLayer fromSuperLayer:(CALayer*) sLayer
{
CGPoint locationPoint = point;
locationPoint = [sLayer convertPoint:locationPoint toLayer:shapeLayer];
CGAffineTransform at = shapeLayer.affineTransform;
return CGPathContainsPoint([shapeLayer path],&at, locationPoint, NO);
}
-(Boolean) isPoint:(CGPoint)point InsideShape:(CSAbstractShapeLayer*) shapeLayer fromSuperLayer:(CALayer*) sLayer
{
CGPoint locationPoint = point;
locationPoint = [sLayer convertPoint:locationPoint toLayer:shapeLayer];
return [[UIBezierPath bezierPathWithCGPath:shapeLayer.path] containsPoint:locationPoint];
}
-(Boolean) isPoint:(CGPoint)point InsideShape:(CSAbstractShapeLayer*) shapeLayer fromSuperLayer:(CALayer*) sLayer
{
CGPoint locationPoint = point;
locationPoint = [sLayer convertPoint:locationPoint toLayer:shapeLayer];
CGRect theRect = CGPathGetBoundingBox(shapeLayer.path);
return CGRectContainsPoint(theRect, locationPoint);
}
注1機能していない:内部に斜線で 権利を四角形を描く私はまだ画像を投稿することができないようですが私はYESと外側(線の左側と矩形の外)としてタップの内側を検出する必要があります
注2:それは役立つかもしれないが、私はそれを理解できないかもしれない....私はあなたがshapeLayerを作成し、shapeLayer.pathにCGPathを追加し、フレームを提供しないと、フレームとthの境界shapeLayerは[0,0,0,0]です。したがって、シェイプがスクリーン上にレンダリングされても、[view.layer hitTest:point]はshapeLayerをターゲットとして検出しません。このため、私はshapeLayerにフレームとバウンドを提供しました。
ありがとうございました!