iPad用のiOS 6.1でアプリを開発しています。と に問題がCALayer
ありTapGestureRecognizer
ます。
私は 7CALayers
虹を形成しています (すべてのレイヤーは色です)。CAShapeLayer
すべてのレイヤーは、からの生成を使用して構築されCGMutablePathRef
ます。すべて正常に動作します。すべてのレイヤーが画面に描画され、美しい虹が見えます。
今、私は単一の色/レイヤーの上のタップを検出したいと考えています。私はこの方法を試します:
- (void)tap:(UITapGestureRecognizer*)recognizer
{
//I've had the tapGestureRecognizer to rainbowView (that is an UIView) in viewDidLoad
CGLayer* tappedLayer = [rainbowView.layer.presentationlayer hitTest:[recognizer locationInView:rainbowView];
if (tappedLayer == purpleLayer) //for example
NSLog(@"PURPLE!");
}
このコードが機能しない理由がわかりません! 私はすでにここで他のトピックを赤くしました: すべてがhitTest:
このような問題を解決する方法を提案します. しかし、私の場合、望ましい結果を得ることができません。誰でも私を助けることができますか?ありがとう!!
編集:
パスとレイヤーを作成するコードは次のとおりです。
- (void)viewDidLoad
{
//Other layers
...
...
//Purple Arc
purplePath = CGPathCreateMutable();
CGPathMoveToPoint(purplePath, NULL, 150, 400);
CGPathAddCurveToPoint(purplePath, NULL, 150, 162, 550, 162, 550, 400);
purpletrack = [CAShapeLayer layer];
purpletrack.path = purplePath;
purpletrack.strokeColor = [UIColor colorWithRed:134.0/255.0f green:50.0/255.0f blue:140.0/255.0f alpha:1.0].CGColor;
purpletrack.fillColor = nil;
purpletrack.lineWidth = 25.0;
[rainbowView.layer insertSublayer:purpletrack above:bluetrack];
}
これが、この問題に対する私の最初のアプローチでした。そして、タッチがうまくいきませんでした。
を使ったメソッドRainbowView
で虹が描かれるクラスも作ってみました。次に、 http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/BezierPaths/BezierPaths.htmlの「パスでヒット検出を行う」セクションに従います
。この場合、問題はメソッドに渡されるパス変数。渡されたパスとパスを比較しようとしましたが、結果はありません。drawRect
UIBezierPaths
UIBezierPath
RainbowView
パスの代わりに曲線を作成することもできます。この場合、図形の塗りつぶし部分がなく、タッチ領域がストロークに限定されている可能性があります。しかし、どうすればカーブに触れたことを認識できるでしょうか?
私はこれらすべてについてとても混乱しています!!! :D