【问题标题】:objective c change size of subview目标c改变子视图的大小
【发布时间】:2015-03-05 18:22:12
【问题描述】:

我对此很陌生,我并不完全了解 Objective-C 的所有内部工作原理,所以我希望有人能帮助我。

基本上我有一个 Person 类,其中每个人都由一组对象(按钮、标签和图像视图)表示,这些对象在整个实现过程中的特定时间出现和消失。有时,我希望该人移动,到目前为止,我想出的最好方法是分别处理所有三个对象并同时为它们设置动画。

我认为必须有更好的方法来做到这一点,我想知道是否可以创建类似“子视图”的东西(我不知道这是否是正确的词)并插入按钮/label/imageView 到那个,然后动画子视图。我想它会是这样的:

Person *person = [[Person alloc] init];
person.view.frame = CGRectMake(x, y, width, height);
[self.view addSubview:person.view];

但这似乎不起作用。有什么建议吗?

提前致谢!

【问题讨论】:

  • 是的,这绝对是可能的!你的 Person 类是继承自 UIViewController 吗?您可以在定义 Person 的 .h 文件中看到这一点。
  • 我相信是的。 .h 文件以 @interface Person 开始(导入后): UIViewController {
  • 如果 Person 继承自 UIViewController,那么将视图控制器添加为子视图并不是一个很好的解决方案。相反,转到界面生成器并将视图控制器的类更改为“Person”。
  • 您需要显示Person 类的代码。问题中没有足够的信息来诊断问题。一般的答案是,“是的,您可以创建一个包含按钮、标签和图像视图作为子视图的视图,然后移动该视图,三个子视图将随之移动。”

标签: objective-c subview


【解决方案1】:

好吧,恐怕你需要稍微改变一下你的设计。 Apple 致力于 MVC 架构设计,在制作应用程序时要遵守这一点非常重要。

你在这里得到的是模型和视图之间的混合,这正是 MVC 不应该发生的。

基本上你有:

1) Model 层,其中包含用于封装信息的所有数据和对象,就像您的 Person 类一样。

2) View 层,用于控制和定义应用程序的 UI 元素,例如 UIView、UIImageView 等

3) Controller 层是Model 和View 层之间的接口。这包括像 UIViewController 这样管理 UIView 的类。

在您的情况下,您需要一个UIView,您可以将所有相关的 UI(按钮、图像)放入其中,以向用户介绍某个人。然后你需要一个Person 类。可能是NSObject 的子类,它定义了您应用中每个Person 的信息,例如可能是一个UIImage 属性,可以在UIImageView 中显示。然后是一个控制器(我推荐UIViewController),它将实例化相关的Person 对象,然后根据需要更新UI。

我不完全确定您在动画方面想要什么,但您可以查看this 以获取有关如何为视图设置动画的信息。并查看:

[UIView animateWithDuration:1
                 animations:^{
    // Cool animations here...
}];

我会先掌握 MVC 和其他关键概念,然后再变得太时髦……

【讨论】:

    猜你喜欢
    • 2017-11-28
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2023-04-03
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多