购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 进度条

进度条可以看到每一项任务现在的状态。例如,在下载的应用程序中有进度条,用户可以很方便地看到当前程序下载了多少,还剩下多少;QQ音乐播放器中也使用到了进度条,它可以让用户看到当前音乐播放了多少,还剩多少等。在Xamarin.iOS中也提供用户实现进度条的类,即UIProgressView。

【示例2-19】 以下将实现进度条加载的效果。具体步骤如下:

(1)创建一个Single View Application类型的工程。

(2)打开MainStoryboard.storyboard文件,对主视图进行设置。效果如图2.36所示。

图2.36 主视图的效果

需要添加的视图以及设置,如表2-12所示。

表2-12 设置视图

(3)打开2-9ViewController.cs文件,编写代码,实现进度条的加载。代码如下:

using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Threading;
using System.Threading.Tasks;
namespace Application
{
        public partial class __9ViewController : UIViewController
        {
                UIProgressView progressView;
                float incrementBy = 0f;
                ……                                              //这里省略了视图控制器的构造方法和析构方法
                #region View lifecycle
                public override void ViewDidLoad ()
                {
                        base.ViewDidLoad ();
                        // Perform any additional setup after loading the view, typically
                           from a nib.
                       //触摸按钮后执行的动作
                        buttonStartProgress.TouchUpInside += delegate {
                                buttonStartProgress.Enabled = false;
                                progressView.Progress = 0f;
                                Task.Factory.StartNew(this.StartProgress);      
                        //创建一个新的任务
                        } ;
                        //为主视图添加进度条对象
                        progressView = new UIProgressView (new RectangleF (60f, 200f,                      200f, 50f));
                        progressView.Progress = 0f;                         //设置进度条的进度
                        incrementBy = 1f / 10f;                             //设置进度条进度的增量值
                        this.View.AddSubview(progressView);
                }
               //进度条开始加载
                public void StartProgress ()
                {
                        float currentProgress = 0f;
                        //判断currentProgress是否小于1,如果是,执行进度条进度的加载
                        while (currentProgress < 1f)
                        {
                                Thread.Sleep(1000);                             //1000毫秒后暂停当前线程
                                this.InvokeOnMainThread(delegate {
                                        progressView.Progress += this.incrementBy;
                                        currentProgress = this.progressView.Progress;
                                        labelStatus.Text=string.Format("Current value: {0}",
                                        Round(progressView.Progress,2));
                                       //判断进度条的当前进度是否为1
                                        if (currentProgress >= 1f)
                                        {
                                                labelStatus.Text = "Progress completed!";
                                                buttonStartProgress.Enabled = true;
                                        }
                                } );
                        }
                }
             ……                                 //这里省略了视图加载和卸载前后的一些方法
                #endregion
        }
}

运行效果如图2.37所示。

图2.37 运行效果

在此程序中,开发者需要注意以下两个知识点。

(1)进度条进度的设置

在实例化进度条时,我们就为进度条设置了进度,使用的属性是Progress。其语法形式如下:

进度条对象.Progress=值;

其中,值是一个浮点类型的数据,它的有效范围为0~1。

(2)进度的增加

当触摸Tap to start progress!按钮时,进度条就会实现自动加载进度的功能,它是通过调用Task.Factory.StartNew()方法实现的。它的功能是创建一个StartProgress()方法的任务,即实现加载。 73eWBP5tAINyYRZ/pJ/WhaNZ5v8dhkg2UpR199PdM1V75liyd4GntzvopedSKtMC

点击中间区域
呼出菜单
上一章
目录
下一章
×