如何使用代码有效地使用 UIImageViews 平铺背景?

How can I tile the background with UIImageViews with code efficiently?

我正在 Xcode 6 中使用许多 UIImageView 平铺 iPhone 背景,我想知道这是否是最有效的解决方案。

我知道一个简单的解决方案是在情节提要中创建图像视图并用它们手动覆盖整个屏幕。我想用代码来做。这是我目前的代码(5x5 是合适的尺寸,因为我可以放大或缩小它以用更大或更大的图像填充屏幕):

CGRect tiles[5][5];
UIImage *tileImages[5][5];
UIImageView *tileViews[5][5];

for(int i=0;i<5;i++)
{
    for(int j=0;j<5;j++)
    {
        tiles[i][j] = CGRectMake(50*i,50*j,50,50);
        tileImages[i][j] = [UIImage imageNamed:@"tile.png"];
        tileViews[i][j] = [[UIImageView alloc] initWithFrame:tiles[i][j]];
        tileViews[i][j].image = tileImages[i][j];
        [self.view addSubview:tileViews[i][j]];
    }
}

目前所有图像都是相同的,但从长远来看,我会让它们取决于各种因素。

我已经阅读过,我知道 UIImageViews 很挑剔。这是使用 UIImageViews 平铺背景的正确且节省内存的方法吗?有一个更好的方法吗?我可以在磁贴初始化后手动进入并更改它显示的图像并让它实时更新吗?

tileView[1][2].image = [UIImage imageNamed:@"anotherTile.png"];

提前致谢,我刚刚在大学完成了为期 6 周的 IOS 编程基础课程,所以我仍然发现自己偶尔会试图安抚 Objective C 上帝。

我想我的疑问是为什么您需要它们成为 图片 视图。在视图或图层中绘制图像非常容易,在网格中排列视图或图层非常容易; image 视图有什么用,当您没有真正使用或不需要图像视图的任何功能时?

我有几个显示平铺图像的应用程序 - 一个在网格中显示 99 个瓶子,一个显示平铺网格 "pieces" 用户成对点击以关闭它们,一个显示矩形网格用户滑动拼图以交换它们并使它们按正确的顺序排列,其中一个显示 "cards" 的网格,用户点击三元组以匹配它们 - 在 none 中 在这些情况下,我使用图像视图。一方面,它们是 CALayer;在其他情况下,它们是自定义 UIView 子类;但在任何情况下我都不会使用 UIImageViews.

对于像图像网格这样简单的东西,使用 UIImageViews 似乎,正如您似乎暗示的那样,有点矫枉过正。如果你使用 UIImageViews 的原因是你不知道如何让 UIView 或 CALayer 绘制它的内容,我会说,在你继续之前停下来学习如何做。