这似乎是一个非常简单的问题,但我一直无法找到任何好的答案。如何在iPhone应用程序中导航时实现加载动画?
我想要做的是在加载某个函数时制作某种动画。在等待内容时,我已经在webapp中包含了一个动画.gif文件,但在本地导航时我需要相同的功能。例如,当我按下标签栏中的一个按钮时,屏幕只是空白,直到整个页面加载完毕。
它不需要任何花哨。我喜欢这种方式,例如在臭名昭着的“旋转轮”的Facebook应用程序中解决。
在此先感谢!
这似乎是一个非常简单的问题,但我一直无法找到任何好的答案。如何在iPhone应用程序中导航时实现加载动画?
我想要做的是在加载某个函数时制作某种动画。在等待内容时,我已经在webapp中包含了一个动画.gif文件,但在本地导航时我需要相同的功能。例如,当我按下标签栏中的一个按钮时,屏幕只是空白,直到整个页面加载完毕。
它不需要任何花哨。我喜欢这种方式,例如在臭名昭着的“旋转轮”的Facebook应用程序中解决。
在此先感谢!
我想这取决于什么被加载?你是否在等待服务器的响应?在这种情况下,我通常在我的视图中放置了一个旋转轮(UIActivityIndicatorView),该旋转轮在未选中动画复选框的情况下具有隐藏功能(还有一条消息可以通过程序设置)。然后,当从服务器接收到数据时,我只需在UIActivityIndicator视图上调用stopAnimating,它就会隐藏起来。然后,您可以显示您需要展示的任何内容。
您可以添加一个UIActivityIndicatorView
取其观点是“装”:
CGRect mainBounds = [[UIScreen mainScreen] bounds];
CGRect indicatorBounds = CGRectMake(mainBounds.size.width/2 - 12,
mainBounds.size.height/2 - 12, 24, 24);
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
initWithFrame:indicatorBounds]];
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
[indicator startAnimating];
[yourLoadingView addSubview:indicator];
我设法添加指标,但遗憾的是,当我应该这样做时。我试图做的是在从一个页面移动到另一个页面时(当制作一个新的ViewController并请求带有NSURLRequest的新页面时)使这个指示器出现。我试图在webView.loading上测试,然后在这是真的时启动动画,但没有任何反应。在加载新页面之前,屏幕仍然是白色的(并且是的,我尝试过使用背景颜色,因此它可见)... – 2009-07-16 14:06:16
可以作为一个子视图添加UIActivityIndicatorView到视图,当动作结束时,你可以从上海华盈删除...
UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
av.frame=CGRectMake(145, 160, 25, 25);
av.tag = 1;
[yourView addSubview:av];
[av startAnimating];
取出
UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[yourView viewWithTag:1];
[tmpimg removeFromSuperview];
希望它可以帮助...
在审美笔记上,请注意UIActivityIndicatorView
附带几种内置样式供您选择。上面的代码示例使用灰色和白色选项,但Apple的文档中还有更多描述。您可以通过设置样式:
-initWithActivityIndicatorStyle:(UIActivityIndicatorViewStyle)
或通过设置对象的activityViewIndicatorStyle
属性。
啊哈!我刚刚偶然发现方便的课程:MBProgressHUD。试一试。我相信它是做你所追求的,然后是一些。
我也在作者的博客文章评论中贡献了一些mods。
您需要为动画的开始和停止之间需要完成的工作实现一个新的线程。 如下图:
http://discussions.apple.com/thread.jspa?threadID=1531358&start=0&tstart=0
您的问题将是该活动的指标将不会显示,因为它只会在下一次通过运行循环显示 - 到那时你会做你需要的一切!
这样做的非常非常非常简单的方法是将你的代码中调用下一个视图到它自己的方法,然后(已建成了UIActivityIndicator按其他职位在这里)就
[self.myactivityindicator startAnimating];
[self performSelector:@selector(myCodeToCallTheView) withObject:nil afterDelay:0];
这给刚刚够在运行代码绘制视图之前绘制指标的机会。当然,一旦你的新视图出现,它会覆盖选择器。
似乎只是我一直在寻找的东西。你有这样的例子代码吗? (在Objective-C中仍然有点生疏) – 2009-07-16 11:39:59
如果你在界面构建器中有一个视图控制器,只需使它成为你自己的UIViewController子类的子类。然后将IBOutlet UIActivityIndicatorView添加到视图。让我们说IBOutlet UIActivityIndicatorView指标;然后您只需调用[indicator startAnimating]或[indicator stopAnimating]; (我认为这是该消息的正确名称 – jcb 2009-07-16 12:03:26
啊对不起,我没有详细说明,但我没有使用IB,应用程序快完成了,所以我宁愿不要在这一点上开始使用它:) – 2009-07-16 12:06:49