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;

  • 相关阅读:
    字段名删不掉
    刷新f5/ctrl+f5
    大量数据模拟
    sub_query join drupal7 view_query_alter
    测试风格的代码
    csv/excel乱码
    window.location.reload(true)的异步现象
    扫描条形码
    yield %%% generator
    batch example
  • 原文地址:https://www.cnblogs.com/linyawen/p/2594430.html
Copyright © 2011-2022 走看看