この問題について3つ以上の投稿(2015年に作成)を調べたにもかかわらず、私は解決していません。
私が実行するときはいつでも、UIBezierPathを使用して線を引くための単純なコードは、プログラムが私にこれを返します:
:CGContextSetStrokeColorWithColor:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSetFillColorWithColor:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSaveGState:無効なコンテキスト0x0。バックトレースを表示したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSetLineWidth:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSetLineJoin:無効なコンテキスト0x0。バックトレースを表示したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSetLineCap:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSetMiterLimit:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextSetFlatness:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextAddPath:無効なコンテキスト0x0。バックトレースを表示したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextDrawPath:無効なコンテキスト0x0。バックトレースを表示したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
:CGContextRestoreGState:無効なコンテキスト0x0。バックトレースを確認したい場合は、CG_CONTEXT_SHOW_BACKTRACE環境変数を設定してください。
@interface line : UIView
UIBezierPath *myPath;
.........
@implementation
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches]anyObject];
CGPoint touchLocation = [touch locationInView:self];
myPath = [UIBezierPath bezierPath];
[myPath moveToPoint:touchLocation];
}
- (void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches]anyObject];
CGPoint touchLocation = [touch locationInView:self];
[myPath addLineToPoint:touchLocation];
[[UIColor blackColor]setStroke];
[[UIColor greenColor]setFill];
[myPath stroke];
}
DrawRectを使用して描画する場合
- (void) drawRect:(CGRect)rect {
....
}
エラーは表示されません。 touchesBegan
とtouchesMoved
が描画を実行できないためにこれらのエラーが発生したのでしょうか?
ココア(OS X)では、以前はsetNeedsDisplay
を使用していましたが、ココアタッチには存在しません。
私が求めているのは、これらのエラーを取り除く方法があるのか、実行時にUIBezierPath
を描画する別の方法があるのか、です。
drawRect:
メソッドの外部で描画操作を使用しようとしているため、無効なコンテキストエラーが発生し、現在のグラフィックコンテキストが設定されていません。
OS Xと同様に、drawRect:
メソッドで描画を実行し、setNeedsDisplay
を使用して結果のイメージを更新する必要があります。また、iOSのUIViewではsetNeedsDisplay
メソッドとsetNeedsDisplayInRect:
メソッドの両方を使用できます。
したがって、結果は次のようになります。
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches]anyObject];
CGPoint touchLocation = [touch locationInView:self];
myPath = [UIBezierPath bezierPath];
[myPath moveToPoint:touchLocation];
}
- (void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches]anyObject];
CGPoint touchLocation = [touch locationInView:self];
[myPath addLineToPoint:touchLocation];
[self setNeedsDisplay];
}
- (void) drawRect:(CGRect)rect {
[[UIColor blackColor]setStroke];
[[UIColor greenColor]setFill];
[myPath stroke];
}