1

線を引こうとしています。

以下のようなコードを書きました。

UIColor *currentColor = [UIColor blackColor];

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
CGContextMoveToPoint(context, startingPoint.x, startingPoint.y);
CGContextAddLineToPoint(context,endingPoint.x , endingPoint.y);
CGContextStrokePath(context);

しかし、これは次のように例外を示しています

Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetLineWidth: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextMoveToPoint: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextAddLineToPoint: invalid context 0x0
Sat Aug 21 10:47:20 AAA-rrr-Mac-mini.local Test[2147] <Error>: CGContextDrawPath: invalid context 0x0
4

2 に答える 2

4

CGContextBeginPath(ctx);また、電話をかける直前に電話する必要がありますCGContextMoveToPoint

- (void) drawRect: (CGRect) rect
{
  UIColor *currentColor = [UIColor blackColor];

  CGContextRef context = UIGraphicsGetCurrentContext(); 
  CGContextSetLineWidth(context, 2.0);
  CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
  CGContextBeginPath(context); // <---- this 
  CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
  CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y);
  CGContextStrokePath(context);
}
于 2010-08-28T07:20:58.127 に答える
2

有効なグラフィック コンテキストがありません。UIGraphicsGetCurrentContext()明らかに返されnilました。

どこに描きたいですか?

画面に描画する場合は、 またはそのサブクラスの 1 つを実装し、 iOS にそのdrawRect:メソッドUIViewを呼び出させる必要があります (画面の一部の更新をトリガーすることによって)。これで、 の実行中に有効なグラフィックス コンテキストが得られますdrawRect:

オフスクリーン ピクセル マップに描画する場合は、UIGraphicsBeginImageContextまたは同様の関数を使用してグラフィックス コンテキストを自分で作成する必要があります。

編集:

したがって、UIViewに描画するには、 UIViewサブクラスを作成してdrawRectをオーバーライドする必要があります。

@interfaceMyView : UIView {
}

@end


@implementation MyUIView

- (void) drawRect: (CGRect) rect
{
  UIColor *currentColor = [UIColor blackColor];

  CGContextRef context = UIGraphicsGetCurrentContext(); 
  CGContextSetLineWidth(context, 2.0);
  CGContextSetStrokeColorWithColor(context, currentColor.CGColor);
  CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
  CGContextAddLineToPoint(context, self.bounds.origin.x + self.bounds.size.x, self.bounds.origin.y + self.bounds.size.y);
  CGContextStrokePath(context);
}

次に、XIB ファイルを開きます (Interface Builder で既に持っているはずです)。そこにUIViewを追加し、クラスとして MyUIView を選択します (インスペクター ウィンドウの最後のタブの最初のフィールド)。

于 2010-08-21T17:58:26.773 に答える