0

我正在将一个 iPad 应用程序放在一起,允许用户通过虚拟游览进行工作。他们能够通过屏幕向前移动,其中一些屏幕上会有其他材料的按钮,例如视频或更多信息。

如果 Keynote 支持超链接,那么它将非常适合,但因为它不支持,所以我试图在 Xcode 中重新创建游览。

我是一个新手,但已经花时间研究并拥有显示“幻灯片”的代码以及在它们中前进和后退的能力。幻灯片不再是带有全屏图形和各种选项按钮的图像视图,有些幻灯片很简单,除了后退和前进之外什么都没有,但其他幻灯片会有额外的链接

然而,以这种简单的方式进行操作意味着我最终会得到大量的视图控制器和 XIB 文件,目前有 75 个,我知道这肯定比任何应用程序都应该拥有的多。但是它确实可以工作,尽管有时在设备上而不是在模拟器中运行它时它会爆炸。

我的问题是一个应用程序中的视图控制器数量是否有限制,并且数量过多会导致不稳定吗?我知道处理视图的其他方法,例如将它们放在数组中并将它们推出单个视图控制器,但这不会让我灵活地为不同的内容定制幻灯片。

我欢迎任何帮助或建议,我希望以正确的方式发布这个问题(这是我的第一个)

非常感谢基隆

我用来操作视图的代码是

-(IBAction)goBack {
    [self dismissModalViewControllerAnimated:NO];
}

-(IBAction)goForward {  
    Slide5ViewController *screen = [[Slide5ViewController alloc] initWithNibName:nil bundle:nil];
    screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:screen animated:YES];
    [screen release];
}   
4

2 回答 2

4

基隆,

为什么不只有一个“幻灯片”视图控制器和不同的图像?使用某种数据结构来保存有关每张幻灯片的按钮、图像和路径的信息,然后继续为每张幻灯片重复使用相同的视图控制器?

然后,视图控制器可以动态加载每个图像,因为它在当前可见视图和自身的下一个实例之间转换......应该只使用 1 个视图控制器。

如果您对使用 Interface Builder 感到满意,请继续使用 XIB 文件来布置所有内容。但是,不要将每个“文件的所有者”设置为不同的视图控制器,而是将它们全部设置为同一个。然后,在你的IBAction方法中(当用户按下一个按钮时),使用一些逻辑说“我现在在这个视图上,并且用户按下了这个按钮,那么我接下来应该去哪一个?”

然后,调用类似的方法loadNewSlide:可能如下所示:

- (void) loadNewSlide:(NSInteger)slideNumber
{
  // Make a string with the new XIB name
  NSString* xibName = [NSString stringWithFormat:@"slide-%d",slideNumber];

  // Create the next slide view controller (it doesn't matter if you create a slide view 
  // controller from within another slide view controller, remember, they are all just  
  // objects)
  SlideViewController *newSlideViewController = [[SlideViewController alloc] initWithNibName:xibName bundle:nil];

  // Change the view
  UIWindow *theWindow = [self.view superview];
  [self.view removeFromSuperview];
  [theWindow addSubview:newSlideViewController.view];

  // Release, the view stack now should be retaining the view controller instead
  [newSlideViewController release];
}

这将比使用 75 个视图控制器(如您之前建议的那样)运行“模态”更好,因为这一次只会在内存中保留 1 张幻灯片 - 无论您当前正在查看什么 - 然后将加载下一张幻灯片是时候移到它了。

于 2010-11-07T12:43:44.183 回答
0

首先,日志中有什么错误?

您是否正确实现了视图控制器的 viewDidUnload 方法?视图控制器应该能够卸载加载的 xib。此外,在 didReceiveMemoryWarning 中释放数据。

其次,使用 UINavigationController 处理视图控制器堆栈而不是模态视图控制器堆栈可能会更好。您可以隐藏导航栏或对其进行自定义。

于 2010-11-07T12:53:34.497 回答