ビュー内のタッチを追跡し、関連する「キャンバス」レイヤーに対応する線を作成しています。ポイントはCGPathRefに蓄積され、touchesDidEnd時にNSArrayに保存されます。
drawLayer時に、現在のパスと保存されているパスの両方を次のように描画します。
// draw the current line:
CGContextAddPath(ctx, path);
CGContextStrokePath(ctx);
NSLog(@"Canvas drawing path %@", path);
// draw the stored lines
for (NSMutableArray *arr in storedPaths) {
CGMutablePathRef aPath = CGPathCreateMutable();
// set up the path with the CGPointObjects
NSLog(@"Canvas drawing stored path");
BOOL inited = NO;
for (CGPointObject *thePt in arr) {
if (inited==NO) {
CGPathMoveToPoint(aPath, NULL, [thePt.x floatValue], [thePt.y floatValue]);
//CGContextMoveToPoint(ctx, [thePt.x floatValue], [thePt.y floatValue]);
inited = YES;
}
else {
CGPathAddLineToPoint(aPath, NULL, [thePt.x floatValue], [thePt.y floatValue]);
//CGContextAddLineToPoint(ctx, [thePt.x floatValue], [thePt.y floatValue]);
}
}
CGContextAddPath(ctx, aPath);
CGContextStrokePath(ctx);
// didn't help connected problem
//CGPathRelease(aPath);
}
これは、最初の行の終点を次の行の始点に接続することを除いて、期待どおりに機能します。例:ユーザーはXを描画しますが、2つのエンドポイントが接続された状態でXを取得します。
CGClosePathは私が望むもののようには見えません。任意の提案をいただければ幸いです。