代码之家  ›  专栏  ›  技术社区  ›  rob5408

将UIView子类化或使用UIView组合

  •  1
  • rob5408  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 15 年前
        1
  •  5
  •   Matt Long    15 年前

    你考虑过核心动画层吗?可以使用图层栅格创建单个视图,每个图层在视图中都有自己的边界和位置。听起来它可能会满足你的需要。在手机上,使用图像设置图层内容非常简单:

    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*。您只需要计算图层矩形和位置,并相应地放置它们。

        2
  •  3
  •   TechZen    15 年前

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

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

    然而,使用CALayers是首选的切削刃方法。基本模型、控制器和视图关系相同,只是Calayer替换了ImageView。

        3
  •  0
  •   Morion    15 年前

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