子类化UIView或用UIView编写

时间:2009-10-28 22:27:21

标签: iphone objective-c uiview interface-builder

我首先要说出我想做什么,因为我不确定我是否在问正确的问题。我正在制作一个基于网格的地图,我将保留一组对象来保持地图的状态和表示。每个对象都是一个Tile类。我应该是UIView或子类NSObject的子类,并且有一个UIView的ivar。我还计划在UIView中有一个UIImageView来加载代表地图位的图像。最后,我想从NIB加载视图。

我个人知道如何做这些事情但不确定最佳做法。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

您是否考虑过Core Animation图层?您可以使用图层网格创建单个视图,每个图层在视图中都有自己的边界和位置。听起来它可能会给你你需要的东西。在手机上,使用图像设置图层内容非常简单:

CALayer *gridLayer = [CALayer layer];
[gridLayer setContents:(id)[gridImage CGImage]];
[gridLayer setBounds:[gridImage bounds]];

// Position the layer's center a x:25.0 y:25.0 within the view
[gridLayer setPosition:CGPointMake(25.0f, 25.0f)];

[[view layer] addSublayer:gridLayer];

变量gridImage是你在某处分配的UIImage *。您只需要计算图层的位置和位置并相应地放置它们。

答案 1 :(得分:3)

确保您清楚地定义了哪些特定类/对象包含您的模型,控制器和视图。您的数据和数据逻辑应该在模型中,您的显示在视图中,您应该将它们与控制器绑在一起。

完成网格的最简单方法是使用由单个控制器定位的UIImageViews。该模型将跟踪地图方块之间的逻辑关系,并将其传递给控制器​​,控制器将图像加载到UIIMageView中。控制器将处理从nib加载的所有内容。

但是,使用CALayers是首选的前沿方法。基本模型,控制器,视图关系是相同的,除了CALayers替换ImageViews。

答案 2 :(得分:0)

如果我理解正确,你可以创建UIImageView的子类。