Xamarin iOS教程之进度条和滚动视图

Xamarin iOS 进度条

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

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

(1创建一个Single View Application类型的工程,命名为2-9。

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

 

图2.40  主视图的效果

需要添加的视图以及设置如表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}",
  • Math.Round(progressView.Progress,2));
  •                         //判断进度条的当前进度是否为1
  •                                                if (currentProgress >= 1f)
  •                                                {
  •                                                         labelStatus.Text = "Progress completed!";
  •                                                         buttonStartProgress.Enabled = true;
  •                                                }
  •                                      } );
  • }
  • }
  • ……                                                                  //这里省略了视图加载和卸载前后的一些方法
  • #endregion
  • }
  • }

运行效果如图2.41所示。

 

图2.41  运行效果

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

1.进度条进度的设置

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

  • 进度条对象.Progress=值;

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

2.进度的增加

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

Xamarin iOS滚动视图

由于iPhone或者是iPad屏幕大小的影响,使我们添加的控件和界面元素受到限制。但是在iPhone或者iPad开发中,人们使用滚动视图解决了这一受到限制的问题。滚动视图由UIScrollView类的一个实例对象实现。

【示例2-24】以下的代码就使用了滚动视图来显示一个比屏幕还要大的图像。具体步骤如下:

(1创建一个Single View Application类型的工程,命名为2-10。

(2添加图像1.jpg到创建工程的Resources文件夹中。

(3打开2-10ViewController.cs文件,编写代码,实现通过滚动视图来观看一个比屏幕还有大的图像。代码如下:

  • using System;
  • using System.Drawing;
  • using MonoTouch.Foundation;
  • using MonoTouch.UIKit;
  • namespace Application
  • {
  • public partial class __10ViewController : UIViewController
  • {
  • UIImageView imgView;
  • UIScrollView scrollView;
  • ……                                               //这里省略了视图控制器的构造方法和析构方法
  • #region View lifecycle
  • public override void ViewDidLoad ()
  • {
  • base.ViewDidLoad ();
  • // Perform any additional setup after loading the view, typically from a nib.
  • imgView = new UIImageView (UIImage.FromFile ("1.jpg"));
  • //为主视图添加滚动视图对象
  • scrollView = new UIScrollView ();
  • scrollView.Frame=new RectangleF(0,0,320,568) ;
  • scrollView.ContentSize = imgView.Image.Size;                                  //滚动范围的大小
  •                             scrollView.ContentOffset = new PointF (200f, 50f);                           //目前滚动的位置
  •                             scrollView.PagingEnabled = true;                                                           //可以整页翻动
  •                             scrollView.MinimumZoomScale = 0.25f;                                               //缩小的最小比例
  •                             scrollView.MaximumZoomScale = 2f;                                                   //放大的最大比例
  • //获取要缩放的图像视图
  • scrollView.ViewForZoomingInScrollView = delegate(UIScrollView scroll) {
  • return this.imgView;
  • } ;
  • scrollView.ZoomScale = 1f;                                                                        //设置变化比例
  • scrollView.IndicatorStyle = UIScrollViewIndicatorStyle.Black;             //滚动指示器的风格设置
  • scrollView.AddSubview (imgView);
  • this.View.AddSubview (scrollView);
  • }
  • ……                                               //这里省略了视图加载和卸载前后的一些方法
  • #endregion
  • }
  • }

运行结果如图2.42所示。

 

图2.42  运行效果

注意:滚动视图中需要注意以下两点。

1.常用属性

滚动视图的属性有很多,表2-13就总结了滚动视图常用的一些属性。

表2-13  滚动视图的属性

 

2.滚动视图常用事件

在滚动视图中一般会使用到一些事件。这里将常用到的一些事件做了总结,如表2-14所示。

表2-14  滚动视图常用事件

 

【示例2-25】以下将实现滚动视图的滚动,并为滚动视图添加了事件。代码如下:

  • using System;
  • using System.Drawing;
  • using MonoTouch.Foundation;
  • using MonoTouch.UIKit;
  • namespace Application
  • {
  • public partial class __30ViewController : UIViewController
  • {
  • ……                                                         //这里省略了视图控制器的构造方法和析构方法
  • #region View lifecycle
  • public override void ViewDidLoad ()
  • {
  • base.ViewDidLoad ();
  • // Perform any additional setup after loading the view, typically from a nib.
  • UIScrollView scrollView = new UIScrollView ();
  • scrollView.Frame = new RectangleF (0, 0, 320, 568);
  •                             scrollView.ContentSize = new SizeF (320, 2000);
  • this.View.AddSubview (scrollView);
  • //滚动视图开始滚动时调用
  • scrollView.Scrolled += delegate {
  •                                      Console.WriteLine ("开始滚动...");
  •                             } ;
  •                             //滚动视图结束滚动时调用
  •                             scrollView.DecelerationEnded += delegate {
  •                                      Console.WriteLine ("滚动结束...");
  •                             };
  • float y = 10;
  • //为滚动视图对象添加标签对象
  • for (float i = 1; i < 21; i++) {
  • UILabel label = new UILabel ();
  • label.Frame = new RectangleF (0, y, 320, 50);
  • label.BackgroundColor = UIColor.Cyan;
  • label.Text = String.Format ("{0}", i);
  • scrollView.AddSubview (label);
  • y += 100;
  • }
  • }
  • ……                                                 //这里省略了视图加载和卸载前后的一些方法
  • #endregion
  • }
  • }

运行效果如图2.43所示。

 

图2.43  运行效果

本文选自:Xamarin iOS开发实战大学霸内部资料,转载请注明出处,尊重技术尊重IT人!

Xamarin iOS教程之进度条和滚动视图的更多相关文章

  1. xamarin.ios 实现圆形进度条

    using System; using UIKit; using System.Drawing; using CoreAnimation; namespace PMM { public class P ...

  2. Xamarin XAML语言教程构建进度条ProgressBar

    Xamarin XAML语言教程构建进度条ProgressBar Xamarin XAML语言教程构建进度条ProgressBar,ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度 ...

  3. Xamarin XAML语言教程Xamarin.Forms中构建进度条

    Xamarin XAML语言教程Xamarin.Forms中构建进度条 ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度条总是水平放置的.本节将讲解如何使用进度条. 注意:进度条在 ...

  4. 最详细在Windows安装Xamarin.iOS教程

    最详细在Windows安装Xamarin.iOS教程 来源:http://www.cnblogs.com/llyfe2006/articles/3098280.html 本文展示了如何设立Xamari ...

  5. Xamarin iOS教程之警告视图

    Xamarin iOS教程之警告视图 Xamarin iOS警告视图 如果需要向用户显示一条非常重要的消息时,警告视图(UIAlertView类)就可以派上用场了.它的功能是把需要注意的信息显示给用户 ...

  6. Xamarin iOS教程之页面控件

    Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示.它是由小白点和滚动视图组成,可以用来控制翻 ...

  7. Xamarin iOS教程之键盘的使用和设置

    Xamarin iOS教程之键盘的使用和设置 Xamarin iOS使用键盘 在文本框和文本视图中可以看到,当用户在触摸这些视图后,就会弹出键盘.本节将主要讲解键盘的输入类型定义.显示键盘时改变输入视 ...

  8. Xamarin iOS教程之显示和编辑文本

    Xamarin iOS教程之显示和编辑文本 Xamarin iOS显示和编辑文本 在一个应用程序中,文字是非常重要的.它就是这些不会说话的设备的嘴巴.通过这些文字,可以很清楚的指定这些应用程序要表达的 ...

  9. Xamarin iOS教程之视图显示图像

    Xamarin iOS教程之视图显示图像 Xamarin iOS显示图像 在主视图中显示一个图像,可以让开发者的应用程序变的更有趣,例如,在一些应用程序开始运行时,都会通过图像来显示此应用程序的玩法或 ...

随机推荐

  1. 构造代码块----java基础总结

    前言:之前一直不知道构造代码块的意思是什么,只是知道他的具体的表现形式,因为经常在面试题中看到,所以准备好好写写. 作用: 给对象进行初始化,对象一建立就运行,而且优于构造方法运行. 和构造方法的区别 ...

  2. shell脚本中自定义日志记录到文件

    自定义日志函数和前期变量 # adirname - return absolute dirname of given file adirname() { odir=`pwd`; cd `dirname ...

  3. android编译时出现org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJavaWithJavac'.错误

    android studio中使用terminal工具.在android studio最下面的底部菜单栏中有(如果没有那cmd中进入项目根目录后): 使用命令  gradlew compileDebu ...

  4. springSecurity自定义认证配置

    上一篇讲了springSecurity的简单入门的小demo,认证用户是在xml中写死的.今天来说一下自定义认证,读取数据库来实现认证.当然,也是非常简单的,因为仅仅是读取数据库,权限是写死的,因为相 ...

  5. ngx_lua_API 指令详解(二)ngx.re.match/find/gmatch/sub/gsub指令集合

    1.先来个官方的ngx.re.match location /ngx_re_match { default_type text/html; content_by_lua_block { local m ...

  6. .NET面试题系列(九)C# 结构体与类的区别

    谈一下什么时候使用结构,什么使用类. 我们知道,结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢.所以当我们描述1个轻量级对象的时候,可以将其定义为结构 ...

  7. 训练赛第二场E题 Cottage Village

    题目大意:在一条X轴上,有若干个正方形,并且保证这些正方形的中心都在X轴上,然后输入n个正方形的中心的X坐标,和正方形的边长,现在要再插入一个正方形,要求是,新插入的正方形至少要有一条边与原来的正方形 ...

  8. 第13月第12天 Constraints priority

    1.Constraints priority 将evInputView的高度约束的priority设为750,evInputView的inputTextView如果不设高度约束,那么高度就是defau ...

  9. 洛谷 P3916 【图的遍历】反向加边+dfs

    前言: 对于这类带环的图,一般记忆化搜索不能很好的对所有遍历的边进行更新取值.因为环上的点可以相互到达,所以他们的答案因当是同步更新的,而dfs一旦你回溯完环上某个点就不会在更新这个点的答案了,做不到 ...

  10. Mysql锁机制简单了解一下

    历史文章推荐: 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 Java NIO 概览 关于分布式计算的一些概念 一 锁分类(按照锁的粒度分类) Mysq ...