0

私のアプリケーションでは、3 つのオブジェクトを含むクラス名がplayGridありNSArrayます。playsNSUIntegers rowCountcolumCount

この例では、6 つの画像があり、それらを 2 列 3 行で表示しようとしています。これらのビューをポップオーバーに表示しようとしています。以前は色のブロックでこれを行うことができましたが、今は画像でやろうとしているので、ポップオーバーを正しく生成できません。以下にリストされているのは、色を表示する成功したポップオーバーの drawRect コードです。

UIImageこれを色の代わりに s で動作するように変換するにはどうすればよいですか?

以下の例では、rowCountandcolumnCountは作成しようとしているものと同じように 2 と 3 ですが、配列には色という名前が付けられ、6 つのUIColor項目が含まれています。

- (void)drawRect:(CGRect)rect {
CGRect b = self.bounds;
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGFloat columnWidth = b.size.width / columnCount;
CGFloat rowHeight = b.size.height / rowCount;

for (NSUInteger rowIndex = 0; rowIndex < rowCount; rowIndex++) {
  for (NSUInteger columnIndex = 0; columnIndex < columnCount; columnIndex++) {
    NSUInteger colorIndex = rowIndex * columnCount + columnIndex;
    UIColor *color = [self.colors count] > colorIndex ? [self.colors objectAtIndex:colorIndex] : [UIColor whiteColor];
      CGRect r = CGRectMake(b.origin.x + columnIndex * columnWidth,
                        b.origin.y + rowIndex * rowHeight,
                        columnWidth, rowHeight);
    CGContextSetFillColorWithColor(myContext, color.CGColor);
    CGContextFillRect(myContext, r);


  }
 }
}

色やCGContextSetFillColorWithColor線などの特定のものは必要ないことはわかっていますが、画像に置き換えるmyContentにはどうすればよいですか。これは私がしなければならないことのようですが、うまくできていません。私は Objective C に慣れていないので、ご協力いただきありがとうございます。

4

1 に答える 1

1

を使用してビューへの描画を続けたいと仮定すると、 のメソッドdrawRect:を使用したいだけだと思います。drawInRect:UIImage

そう:

UIImage *image = [plays objectAtIndex:rowIndex * columnCount + columnIndex];
[image drawInRect:r];

のパフォーマンスは良くないと聞いたことがありますが、drawInRect自分で測定したことはありません。drawInRect:また、必要に応じて四角形に合わせて画像をスケーリングすることにも注意してください。視覚的には、結果が意図したものと異なる場合があります。

別の方法は、ビューを静的にレイアウトできるニブでポップオーバーのビューを構成することです。常に 2x3 マトリックスが必要な場合は、UIImageViewインスタンスの 2x3 グリッドを使用してビューをセットアップできます。

編集:(現在、四角形に画像を描画していることを明確にするために、色の塗りつぶしブロックはありません)

- (void)drawRect:(CGRect)rect {
    CGRect b = self.bounds;
    CGContextRef myContext = UIGraphicsGetCurrentContext();
    CGFloat columnWidth = b.size.width / columnCount;
    CGFloat rowHeight = b.size.height / rowCount;

    for (NSUInteger rowIndex = 0; rowIndex < rowCount; rowIndex++) {
        for (NSUInteger columnIndex = 0; columnIndex < columnCount; columnIndex++) {
            CGRect r = CGRectMake(b.origin.x + columnIndex * columnWidth,
                        b.origin.y + rowIndex * rowHeight,
                        columnWidth, rowHeight);
            UIImage *image = [plays objectAtIndex:rowIndex * columnCount + columnIndex];
            [image drawInRect:r];
        }
    }
}
于 2012-10-08T14:20:19.650 に答える