0

在我的应用程序中,我有一个类名playGrid,其中包含三个对象,一个NSArray名为 的图像plays,以及两个用于弹出框中将使用的行和列的数量NSUIntegers rowCountcolumCount

对于这个例子,我有 6 张图像,我试图将它们显示在 2 列和 3 行中。我试图在弹出窗口中显示这些视图。以前我可以用颜色块来做到这一点,但现在我正在尝试处理图像,我无法正确生成弹出框。下面列出的是我的 drawRect 代码,用于显示颜色的成功弹出框。

我如何将其转换为使用UIImages 而不是颜色?

在下面的示例中,rowCountandcolumnCount是 2 和 3,就像我们试图制作的那样,但数组名为 colors,包含六个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 矩阵,你可以用 2x3UIImageView实例网格在那里设置你的视图。

编辑:(澄清你现在在矩形中绘制图像,没有填充颜色块)

- (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 回答