zoukankan      html  css  js  c++  java
  • 进度显示例子学习


    Cocoa Touch提供用于通知用户等待进程完成的类:
    1、UIActivityIndicatorView:提供一个旋转的圆,通知用户等待,不提供具体信息
    2、UIProgressView:显示进度条,量化工作量(时间)
    3、UIProgressHUD:不量化工作,但显示工作状态或描绘进度。注意此类不在标准的SDK中

    针对以上三类,分别用代码来演示应用
    1\

    #define INDICATOR_VIEW 999

    @interface HelloController : UIViewController
    {
    BOOL progressShowing;
    }
    @end

    @implementation HelloController
    - (void) performAction
    {
    UIActivityIndicatorView
    *activityIndicator = (UIActivityIndicatorView *)[self.view viewWithTag:INDICATOR_VIEW];
    if (progressShowing) [activityIndicator stopAnimating]; else [activityIndicator startAnimating];
    progressShowing
    = !progressShowing;
    }

    - (id) init
    {
    if (self = [super init]) self.title = @"Hello World";
    return self;
    }

    - (void)loadView
    {
    UIView
    *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    self.view
    = contentView;
    contentView.backgroundColor
    = [UIColor whiteColor];
    [contentView release];

    self.navigationItem.rightBarButtonItem
    = [[[UIBarButtonItem alloc]
    initWithTitle:
    @"Do It"
    style:UIBarButtonItemStylePlain
    target:self
    action:@selector(performAction)] autorelease];

    // Add the progress indicator but do not start it
    progressShowing = NO;
    UIActivityIndicatorView
    *activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
    [activityIndicator setCenter:CGPointMake(
    160.0f, 208.0f)];
    [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.tag
    = INDICATOR_VIEW;
    [contentView addSubview:activityIndicator];
    [activityIndicator release];
    }
    @end


    代码中个人觉得关键的地方在:progressShowing和activityIndicator.tag = INDICATOR_VIEW;[contentView addSubview:activityIndicator];


    2\

    扩展UIActionSheet函数
    @interface UIActionSheet (extended)
    - (void) setNumberOfRows: (NSInteger) rows;
    - (void) setMessage: (NSString *)message;
    @end


    //Timer事件处理
    - (void) incrementBar: (id) timer
    {
    amountDone
    += 1.0f;
    UIProgressView
    *progbar = (UIProgressView *)[self.baseSheet viewWithTag:PROGRESS_BAR];
    [progbar setProgress: (amountDone
    / 20.0)];
    if (amountDone > 20.0)
    {
    [self.baseSheet dismissWithClickedButtonIndex:
    0 animated:YES];
    [timer invalidate];
    }
    }

    //呈现视图
    - (void) presentSheet
    {

    if (!self.baseSheet) {
    baseSheet
    = [[UIActionSheet alloc]
    initWithTitle:
    @"Please Wait"
    delegate:self
    cancelButtonTitle:nil
    destructiveButtonTitle: nil
    otherButtonTitles: nil];
    [baseSheet setNumberOfRows:
    5];
    [baseSheet setMessage:
    @"Updating Internal Databases"];

    UIProgressView
    *progbar = [[UIProgressView alloc] initWithFrame:CGRectMake(50.0f, 70.0f, 220.0f, 90.0f)];
    progbar.tag
    = PROGRESS_BAR;
    [progbar setProgressViewStyle: UIProgressViewStyleDefault];
    [baseSheet addSubview:progbar];
    [progbar release];
    }

    UIProgressView
    *progbar = (UIProgressView *)[self.view viewWithTag:PROGRESS_BAR];
    [progbar setProgress:(amountDone
    = 0.0f)];
    [NSTimer scheduledTimerWithTimeInterval:
    0.5 target: self selector: @selector(incrementBar:) userInfo: nil repeats: YES];
    [baseSheet showInView:self.view];
    }


    注意释放函数
    - (void) dealloc
    {
    //释放baseSheet
    if (self.baseSheet) [self.baseSheet release];
    [super dealloc];
    }


    此例Timer来定时更新进度条状态
    为了显示进度状态,特用了UIActionSheet来处理

    在XCode4上执行,看不到应有的效果~~杯具中,看后续怎么处理

    另外,
            [baseSheet setNumberOfRows:5];
            [baseSheet setMessage:@"Updating Internal Databases"];
    没有执行应有的效果~~~

    3\
    声明已存在的类

    - (void) dealloc
    {
    //释放baseSheet
    if (self.baseSheet) [self.baseSheet release];
    [super dealloc];
    }


    控制器中部分代码

    - (void) killHUD: (id) aHUD
    {
    [aHUD show:NO];
    [aHUD release];
    }
    - (void) presentSheet
    {
    id HUD = [[UIProgressHUD alloc] initWithWindow:[self.view superview]];
    [HUD setText:
    @"Downloading File. Please wait."];
    [HUD show:YES];

    [self performSelector:@selector(killHUD:) withObject:HUD afterDelay:
    5.0];
    }


    类学习:

    UIActivityIndicatorView类

    The UIActivityIndicatorView class creates and manages an indicator showing the indeterminate progress of a task.

    UIActivityIndicatorView类创建并管理指示器,此指示器用于显示当前任务的进度。

    方法:
        – initWithActivityIndicatorStyle:
        – startAnimating
        – stopAnimating
        – isAnimating
       
    属性:
          hidesWhenStopped表示当动画结束后此视图是否隐藏

          activityIndicatorViewStyle指示器视图样式

    UIProgressView类

    方法:
        – initWithProgressViewStyle:

    属性:
        progress:进度,float,0.0-1.0
        progressViewStyle:进度视图样式
       
    未公开:
    UIProgressHUD类   

    UIActionSheet的部分函数:
    - (void) setNumberOfRows: (NSInteger) rows;
    - (void) setMessage: (NSString *)message;


    无论生活、还是技术,一切都不断的学习和更新~~~努力~
  • 相关阅读:
    Asp.net MVC3 Routing study
    Sharepoint 站点页面错误问题
    vc2010 学习笔记1
    UML类成员的困惑
    河道二维水流模拟高精度算法研究
    朱庆:真三维GIS技术进展
    map
    SIGGRAPH 2010: 一场视觉盛宴[转]
    新网站开张,欢迎大家
    获取其它进程内EDIT BOX内容的一种方法
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/2058852.html
Copyright © 2011-2022 走看看