子类化 UIView 或使用 UIView 组合
Posted
技术标签:
【中文标题】子类化 UIView 或使用 UIView 组合【英文标题】:Subclassing UIView or composing with UIView 【发布时间】:2009-10-28 22:27:20 【问题描述】:我会先说我想做什么,因为我不确定我问的问题是否正确。我正在制作一个基于网格的地图,并将保存一组对象以保持地图的状态和表示。每个对象都属于 Tile 类。我应该继承 UIView 还是继承 NSObject 并拥有 UIView 的 ivar。我还计划在 UIView 中有一个 UIImageView 来加载代表地图那一点的图像。最后,我想从 NIB 加载视图。
我个人知道如何做这些事情,但不确定最佳实践。有什么想法吗?
【问题讨论】:
哎呀,完全忽略了“iphone”标签,哎呀。 【参考方案1】:您是否考虑过核心动画层?您可以创建一个带有层网格的单个视图,每个层在视图中都有自己的边界和位置。听起来它可能会给你你需要的东西。在手机上,用图片设置图层的内容就这么简单:
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】:确保您清楚地定义了哪些特定的类/对象构成了您的模型、控制器和视图。您的数据和数据逻辑应该在模型中,您的显示在视图中,并且您应该将它们与控制器联系在一起。
完成网格的最简单方法是使用由单个控制器定位的 UIImageView。该模型将跟踪地图方块之间的逻辑关系并将其传递给控制器,控制器会将图像加载到 UIIMageView 中。控制器将处理从 nib 加载所有内容。
但是,使用 CALayers 是首选的前沿方法。基本模型、控制器、视图关系相同,只是用CALayers代替了ImageViews。
【讨论】:
【参考方案3】:如果我理解正确,你可以创建 UIImageView 的子类。
【讨论】:
以上是关于子类化 UIView 或使用 UIView 组合的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 Nib 的情况下实例化和调用 UIView 子类