0

最初に私はグラフィックを描きます:

    -(void)drawRect: (CGRect)rect{  

        //Circle
    circle = UIGraphicsGetCurrentContext();  
    CGContextSetFillColorWithColor(circle, [UIColor darkGrayColor].CGColor);
    CGContextFillRect(circle,CGRectMake(10,10, 50, 50));

        //rectangle
    rectangle = UIGraphicsGetCurrentContext();  
    CGContextSetFillColorWithColor(rectangle, [UIColor darkGrayColor].CGColor);
    CGContextFillRect(rectangle, CGRectMake(10, 10, 50, 50));

        //square 
    square = UIGraphicsGetCurrentContext();  
    CGContextSetFillColorWithColor(square, [UIColor darkGrayColor].CGColor);
    CGContextFillRect(square, CGRectMake(100, 100, 25, 25));

        //triangle  
    triangle = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(triangle, [UIColor darkGrayColor].CGColor);
    CGPoint points[6] = { CGPointMake(100, 200), CGPointMake(150, 250),
                              CGPointMake(150, 250), CGPointMake(50, 250),
                              CGPointMake(50, 250), CGPointMake(100, 200) };
    CGContextStrokeLineSegments(triangle, points, 6);

    }

そして今、私はグラフィックを配列に入れたいと思います:

-(void)viewDidLoad {

grafics = [[NSMutableArray alloc]initWithObjects: circle,rectangle,square,triangle];
[self.navigationItem.title = @"Shape"];
[super viewDidLoad];
}

問題は、キャストを作成する必要があるため、オブジェクトがこの配列に収まるということです。もう1つの問題は、UITableViewControllerが配列を行にロードしないことです。テーブルビューに問題はありませんが、CGContextの処理に失敗します。私が間違っていることは何ですか?

4

2 に答える 2

4

drawRect:UIViewグラフィックオブジェクトを事前に作成するのではなく、ビュー自体を描画するために使用されるメソッドです。

図形を作成して保存し、後で描画したいようですので、として図形を作成し、をUIImage使用して描画するのが妥当と思われますUIImageViewUIImageに直接保存できますNSArray

画像を作成するには、次の手順を実行します(メインキューで、drawRectではありません:)。

1)ビットマップコンテキストを作成します

UIGraphicsBeginImageContextWithOptions(size, opaque, scale);

2)コンテキストを取得する

CGContextRef context = UIGraphicsGetCurrentContext();

3)必要なものを描く

4)コンテキストを画像にエクスポートします

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

5)コンテキストを破棄する

UIGraphicsEndImageContext();

6)画像への参照を保存します

[yourArray addObject:image];

作成する形状ごとに繰り返します。

詳細については、上記の機能のドキュメントを参照してください。drawRect:プログラム内の任意の場所への描画とコンテキストの操作の違いをよりよく理解するには、 Quartz2Dプログラミングガイド、特にグラフィックスコンテキストのセクションを読むことをお勧めします。

于 2012-06-04T09:03:43.713 に答える
2

まず、をUIGraphicsGetCurrentContext返しますCGContextRef。これはオブジェクトではなく、コレクションに直接保存することはできません(編集:これは実際には当てはまりません。コメントを参照してください)。技術的に言えば、コンテキストをまたはでラップするか、 :NSValueに変換することができます。UIImage

CGImageRef imageRef = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:imageRef];

結果UIImageはオブジェクトであり、コレクションに適切に保存できます。しかし、コードサンプルは全体像では意味がありません。この-drawRect:メソッドは、後で使用するグラフィックを作成するのではなく、コンポーネントを描画することを目的としています。そして、それ-viewDidLoadUIViewController方法であり、1つではありませんUIView。質問を編集して、何をしようとしているのか説明していただけますか?

于 2012-06-04T08:23:26.340 に答える