0

drawRectを使用しないと、多くの人がコンテキストエラーを受け取ると聞きました

今私はこれを持っています:

 - (void)drawRect:(CGRect)rect {  
  NSLog(@"drawRect: Starts");
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
  CGContextSetLineWidth(context, 3.0);
  CGContextMoveToPoint(context, lineStart.x, lineStart.y);
  CGContextAddLineToPoint(context, lineEnd.x, lineEnd.y);
  CGContextStrokePath(context); 
}

エラー:

<Error>: CGContextSetRGBStrokeColor: invalid context

これは以前のプログラムで機能していましたが、今回のプログラムでは機能しませんでした。違い:このUIViewを呼び出すViewControllerがあります。

-(void)createLine:(CGPoint)start:(CGPoint)end {
 NSLog(@"createLine: Starts");
 lineEnd = start;
 lineStart = end;
 self = [super initWithFrame:drawRect:CGRectMake(fmin(lineStart.x, lineEnd.x), fmin(lineStart.y, lineEnd.y), fabs(lineStart.x - lineEnd.x), fabs(lineStart.y - lineEnd.y))];
}

これが私の最初の質問です。ここにどれだけの情報コードを入れるべきかわからないので、簡単に説明してください。

4

2 に答える 2

1

明白なことを述べるリスクがありますcreateLineが、有効なコンテキストがないときに電話をかけているようです。drawRectこのため、直接電話することはお勧めできません。Intsad、呼び出し、適切な時間にsetNeedsDisplayシステムが呼び出されるようにします。drawRect

于 2010-06-08T17:52:13.793 に答える
0

drawRectwalkytalky が書いたように、直接電話してはいけません。drawRectへの呼び出しがトリガーされることを確認する必要がある場合は、 を呼び出しますsetNeedsDisplay。これによりdrawRect、 が適切なタイミングで呼び出されるようになります。

あなたのメソッドの最後の行はcreateLine::少し紛らわしく、非正統的です。あなたの目的のために、その行を削除して、単にすべてに置き換えたいと思いますsetNeedsDisplaydrawRectこれにより、新しい lineStart 値と lineEnd 値を使用してへの呼び出しがトリガーされます。

于 2015-06-06T21:09:28.203 に答える