徐州软件开发网、徐州程序员、徐州程序员招聘求职、徐州软件企业推荐、 软件项目交易。点击注册加入我们,进入论坛发布消息

【行动胜于雄辩】徐州程序员交流QQ群:324379(一群,满)1182709(二群).进群请先看公告! 招聘求职请先在本站'招聘\求职区'发布,只在群里发布的,将被请出程序员交流群! 谢谢合作

本主题共有 0 篇回复,最新回复发表于 04-13-2010 15:30,作者 xzsdn_09
页 1 / 1 (1 项)
帖子排序: 上一主题 下一主题
  • 04-13-2010 15:30

    • xzsdn_09
    • 灌水10强
    • 注册时间 01-20-2010
    • 发帖总数 90

    万能的iPhone等待画面

    为了改善程序的用户友好性,当你的iPhone 程序需要执行稍稍花点时间的处理的时候,我想显示一个标准的iPhone 等待画面是最合适的。那这里咱们使用iPhone SDK中提供标准的控件UIActivityIndicatorView ,来简单的实现Mac中经典的旋转轮等待画面。

    首先介绍一下UIActivityIndicatorView ,UIActivityIndicatorView 其实是一个View,所以你可以作为一个子View加入到当前画面的里面。但是当你的程序画面比较多的时候需要每个View去添加UIActivityIndicatorView 就比较麻烦了不是。
    所以懒人有懒方法,我个人给大家推荐一个简单的懒方法,就是把View添加到程序的唯一的Window中,然后在各个画面需要显示等待窗口的时候,统一调用AppDelegate中自定义的方法就可以了。

    // 首先在程序开始的时候在加入window中加入UIActivityIndicatorView
     
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
    RootViewController *viewController = [[RootViewController alloc]
    initWithNibName:@"RootViewController"
    bundle:nil];
    self.rootViewController = viewController;
    [viewController release];
    [_window addSubview:_rootViewController.view];
    // 初始化activityView,计算出当前窗口的中间位置
    UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc]
    initWithFrame:CGRectMake(_window.bounds.size.width / 2 - 16.0f,
    _window.bounds.size.height / 2 - 16.0f,
    32.0f,
    32.0f)];
    activityView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
    activityView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
    | UIViewAutoresizingFlexibleRightMargin
    | UIViewAutoresizingFlexibleTopMargin
    | UIViewAutoresizingFlexibleBottomMargin;
    activityView.hidesWhenStopped = YES;
    // INDICATOR_VIEW是我自己定义的一个整数,例:#define INDICATOR_VIEW 10000
    activityView.tag = INDICATOR_VIEW;
    // 添加到window
    [_window addSubview:activityView];
    [activityView release];
    [_window makeKeyAndVisible];
    }

    然后再修改AppDelegate类中加入自定义的方法,用来显示和隐藏等待旋转轮。

    - (void)showActivityView {
    [(UIActivityIndicatorView *)[_window viewWithTag:INDICATOR_VIEW] startAnimating];
    }

    - (void)hideActivityView {
    // stop之后自动隐藏
    [(UIActivityIndicatorView *)[_window viewWithTag:INDICATOR_VIEW] stopAnimating];
    }

    接下来就是在各个画面中的使用了,大致如下

    XXXAppDelegate *appDelegate = (XXXAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate showActivityView];

    另外补充一点,当你在调用显示等待画面代码的后面,有一断比较重的代码的时候,程序运行起来,并没有向你想的那样,马上显示等待画面,而是等那断比较重的 代码也运行完之后,等待画面再被显示,显然这不是你想要的结果。虽然有几种方法可以避免,比如你可以通过在viewWillAppear方法中分开等待画 面的显示,来避免但效果并不理想,会让你的程序感觉上很慢。另外你也可以启动一个Thread来运行也可以,不过好像更慢。有了下面这两个 viewController中自带的方法就很方便了,看名字就知道是什么功能了吧。

    [self performSelectorInBackground:@selector(yourMethodName) withObject:nil];
    [self performSelectorOnMainThread:@selector(yourMethodName) withObject:nil waitUntilDone:NO];

页 1 / 1 (1 项)
徐州软件开发网、徐州软件开发社区、徐州程序员
© Copyright 2008-2011 XZSDN.NET   Powered By communityserver   站长博客 我的Blog
苏ICP备09002379号 | 意见反馈 | 联系我