7

ここで私が間違っていることを理解しようとしています。いくつかのことを試しましたが、画面上にそのとらえどころのない長方形が表示されることはありません。今、やりたいことはそれだけです。画面上に 1 つの四角形を描くだけです。

CGContextSetRGBFillColor() 以外のすべてで「無効なコンテキスト」を取得しています。その後、コンテキストを取得するのはちょっと間違っているように思えますが、昨夜使用した例を家に見ているわけではありません。

私も何か他のことを台無しにしましたか?せめて今夜はここまでやりたい…。

- (id)initWithCoder:(NSCoder *)coder
{
  CGRect myRect;
  CGPoint myPoint;
  CGSize    mySize;
  CGContextRef context;

  if((self = [super initWithCoder:coder])) {
    NSLog(@"1");
    currentColor = [UIColor redColor];
    myPoint.x = (CGFloat)100;
    myPoint.y = (CGFloat)100;
    mySize.width = (CGFloat)50;
    mySize.height = (CGFloat)50;
    NSLog(@"2");
    // UIGraphicsPushContext (context);
    NSLog(@"3");
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
    context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, currentColor.CGColor);
    CGContextAddRect(context, myRect);
    CGContextFillRect(context, myRect);
  }

  return self;

}

ありがとう、

ショーン。

4

2 に答える 2

40

ビューベースのテンプレートから始めて、Drawerという名前のプロジェクトを作成します。プロジェクトに UIView クラスを追加します。名前をSquareView (.h および .m) にします。

DrawerViewController.xibをダブルクリックしてInterface Builderで開きます。Classポップアップ メニューを使用して、Identity Inspector (command-4) でジェネリック ビューをSquareViewに変更します。保存してXcodeに戻ります。

次のコードをSquareView.mファイルの drawRect: メソッドに挿入して、大きく曲がった空の黄色の長方形と、小さな緑色の透明な正方形を描画します。

- (void)drawRect:(CGRect)rect;
{   
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0); // yellow line

    CGContextBeginPath(context);

    CGContextMoveToPoint(context, 50.0, 50.0); //start point
    CGContextAddLineToPoint(context, 250.0, 100.0);
    CGContextAddLineToPoint(context, 250.0, 350.0);
    CGContextAddLineToPoint(context, 50.0, 350.0); // end path

    CGContextClosePath(context); // close path

    CGContextSetLineWidth(context, 8.0); // this is set from now on until you explicitly change it

    CGContextStrokePath(context); // do actual stroking

    CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.5); // green color, half transparent
    CGContextFillRect(context, CGRectMake(20.0, 250.0, 128.0, 128.0)); // a square at the bottom left-hand corner
}

描画を行うためにこのメソッドを呼び出す必要はありません。ビュー コントローラーは、プログラムが起動し、NIB ファイルがアクティブ化されたときに、少なくとも 1 回は自分自身を描画するようにビューに指示します。

于 2009-07-18T09:58:12.387 に答える
9

CG コードをinitWithCoderに入れることは想定されていません。そのメッセージは、初期化の目的でのみ使用する必要があります。

描画コードを次の場所に置きます。

- (void)drawRect:(CGRect)rect

UIView をサブクラス化している場合...

于 2009-06-09T13:50:50.313 に答える