Xamarin iOS教程之页面控件

Xamarin iOS 页面控件

在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示。它是由小白点和滚动视图组成,可以用来控制翻页。在滚动滚动视图时可通过页面控件中的小白点来观察当前页面的位置,也可通过点击页面控件中的小白点来滚动到指定的页面。

 

图2.44  页面控件

在此图中,小白点对应的当前页被高亮显示。此控件指示内容分为两个页面。

【示例2-26】以下将使用页面视图来控制图像的显示。具体步骤如下:

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

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

(3打开2-11ViewController.cs文件,编写代码,实现在使用滚动视图来控件图像的显示。代码如下:

  • using System;
  • using System.Drawing;
  • using MonoTouch.Foundation;
  • using MonoTouch.UIKit;
  • namespace Application
  • {
  • public partial class __11ViewController : UIViewController
  • {
  • UIImageView page1;
  • UIImageView page2;
  • UIImageView page3;
  • UIScrollView scrollView;
  • UIPageControl pageControl;
  • ……                                                                  //这里省略了视图控制器的构造方法和析构方法
  • #region View lifecycle
  • public override void ViewDidLoad ()
  • {
  • base.ViewDidLoad ();
  • // Perform any additional setup after loading the view, typically from a nib.
  • //添加滚动视图对象scrollView
  • scrollView = new UIScrollView ();
  • scrollView.Frame = new RectangleF (0, 0, 320, 495);
  • //滚动视图结束滚动时所调用的方法
  •          scrollView.DecelerationEnded += this.scrollView_DecelerationEnded;
  • //添加页面
  • pageControl = new UIPageControl ();
  •                             pageControl.Frame = new RectangleF (0, 540, 320, 37);
  •                             pageControl.Pages = 3;                                        //设置页面控件的页数,即小白点
  • //当页面控件的数值发生改变时调用
  •                             pageControl.ValueChanged += this.pageControl_ValueChanged;
  • //滚动视图的滚动事件
  • scrollView.Scrolled += delegate {
  •                                      Console.WriteLine ("Scrolled!");
  •                             } ;
  • scrollView.PagingEnabled = true;
  • RectangleF pageFrame = scrollView.Frame;
  • scrollView.ContentSize = new SizeF (pageFrame.Width * 3, pageFrame.Height);
  • //添加图像视图对象page1
  • page1 = new UIImageView (pageFrame);
  • page1.ContentMode = UIViewContentMode.ScaleAspectFit;
  • page1.Image = UIImage.FromFile ("1.jpg");
  • pageFrame.X += this.scrollView.Frame.Width;
  • //添加图像视图对象page2
  • page2 = new UIImageView (pageFrame);
  • page2.ContentMode = UIViewContentMode.ScaleAspectFit;
  • page2.Image = UIImage.FromFile ("2.jpg");
  • pageFrame.X += this.scrollView.Frame.Width;
  • //添加图像视图对象page3
  • page3 = new UIImageView (pageFrame);
  • page3.ContentMode = UIViewContentMode.ScaleAspectFit;
  • page3.Image = UIImage.FromFile ("3.jpg");
  • scrollView.AddSubview (page1);
  • scrollView.AddSubview (page2);
  • scrollView.AddSubview (page3);
  • this.View.AddSubview (scrollView);
  • this.View.AddSubview (pageControl);
  • }
  • private void scrollView_DecelerationEnded (object sender, EventArgs e)
  • {
  • float x1 = this.page1.Frame.X;                    //获取图像视图对象page1的x位置
  • float x2 = this.page2.Frame.X;                    //获取图像视图对象page2的x位置
  • float x = this.scrollView.ContentOffset.X;  //获取滚动视图对象scrollView目前滚动的x位置
  • //判断x是否和x1相等
  • if (x == x1)
  • {
  • this.pageControl.CurrentPage = 0;                   //设置页面控件当前的页
  • } else if (x == x2)                                                               //判断x是否和x2相等
  • {
  • this.pageControl.CurrentPage = 1;
  • } else
  • {
  • this.pageControl.CurrentPage = 2;
  • }
  • }
  • private void pageControl_ValueChanged (object sender, EventArgs e)
  • {
  • PointF contentOffset = this.scrollView.ContentOffset;
  • //使用switch语句判断当前的页数
  • switch (this.pageControl.CurrentPage)
  • {
  • case 0:
  •          contentOffset.X = this.page1.Frame.X;
  •                                      this.scrollView.SetContentOffset (contentOffset, true);  //设置滚动视图目前滚动的位置
  • break;
  • case 1:
  • contentOffset.X = this.page2.Frame.X;
  • this.scrollView.SetContentOffset (contentOffset, true);
  • break;
  • case 2:
  • contentOffset.X = this.page3.Frame.X;
  • this.scrollView.SetContentOffset (contentOffset, true);
  • break;
  • default:
  • break;
  • }
  • }
  • ……                                                            //这里省略了视图加载和卸载前后的一些方法
  • #endregion
  • }
  • }

运行效果如图2.45所示。

 

图2.45  运行效果

在页面控件中,需要开发者需要注意以下2个问题:

1.页面控件的属性设置

页面控件属性设置并不多,一般就是设置页数以及当前页。设置页面控件的页数,需要使用Pages属性,其语法形式如下:

  • 页面控件对象.Pages=页数;

其中,页数是一个整型数据。设置页面控件的当前页,需要使用CurrentPage属性,其语法形式如下:

  • 页面控件对象.CurrentPage=当前页;

其中,当前页是一个整型数据。

2.页面控件的响应

页面控件的响应需要使用ValueChanged事件实现。示例2-26中的代码如下:

  • pageControl.ValueChanged += this.pageControl_ValueChanged;

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

Xamarin iOS教程之页面控件的更多相关文章

  1. Xamarin XAML语言教程构建ControlTemplate控件模板 (四)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (四) 2.在页面级别中构建控件模板 如果开发者要在页面级别中构建控件模板,首先必须将ResourceDictionary添 ...

  2. Xamarin XAML语言教程构建ControlTemplate控件模板

    Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...

  3. Xamarin XAML语言教程构建ControlTemplate控件模板 (三)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (三) (3)打开MainPage.xaml.cs文件,编写代码,实现主题的切换功能.代码如下: using System; ...

  4. Xamarin XAML语言教程构建ControlTemplate控件模板 (二)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (二) (2)打开MainPage.xaml文件,编写代码,将构建的控件模板应用于ContentView中.代码如下: &l ...

  5. Xamarin iOS教程之使用按钮接接收用户输入

    Xamarin iOS教程之使用按钮接接收用户输入 Xamarin iOS使用按钮接接收用户输入 按钮是用户交互的最基础控件.即使是在iPhone或者iPad中,用户使用最多操作也是通过触摸实现点击. ...

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

    Xamarin iOS教程之进度条和滚动视图 Xamarin iOS 进度条 进度条可以看到每一项任务现在的状态.例如在下载的应用程序中有进度条,用户可以很方便的看到当前程序下载了多少,还剩下多少.Q ...

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

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

  8. 如何获取Iframe的页面控件的值

    有时候我们在页面需要使用iframe的方法来引用另一个页面,虽然个人建议不要使用iframe哈,但是有些时候是没得法了才使用的咯,那么在使用的过程中也会遇到某一些问题,我将自己遇到的问题记录下来方便以 ...

  9. 《zw版·Halcon-delphi系列原创教程》halconxlib控件列表

    <zw版·Halcon-delphi系列原创教程>halconxlib控件列表 Halcon v11.01版,com控件,安装后,共有75个控件,      不过最重要的控件,只有两个,T ...

随机推荐

  1. Intel 8086_通用寄存器|段寄存器

  2. Solr记录-solr内核与索引

    Solr核心(内核) Solr核心(Core)是Lucene索引的运行实例,包含使用它所需的所有Solr配置文件.我们需要创建一个Solr Core来执行索引和分析等操作. Solr应用程序可以包含一 ...

  3. [软件]在浏览器里添加MarkDown Here(插件)

    1. 先来说说这个插件的作用是什么: 用于在网页一些编辑文本的地方, 使用MacDown编辑文本 支持大部分浏览器,  https://github.com/adam-p/markdown-here ...

  4. 在html5 canvas的destination-atop属性的一些奇怪的问题

    最近在整理canvas的时候发现HTML5 Canvas开发详解一个奇怪的属性解释 目标图形是显示在画布上的位图 而原图形是指要回执在画布上的形状 w3school上面是这样说的 destinatio ...

  5. Android利用LocalSocket实现Java端进程与C端进程之间的IPC

    Android是建立在Linux之上的OS,在涉及到安全.网络协议.文件加密等功能时,往往需要通过C语言调用底层API来实现,而如何发出指令让C端执行我们想要的功能,并且在执行之后有返回结果呢,这就需 ...

  6. 勒索软件Locky、Tesalcrypt等使用了新的工具躲避检测

    勒索软件Locky.Tesalcrypt等使用了新的工具躲避检测 今天我们发现Locky勒索软件家族使用一种新的工具来躲避检测,并且可能已经感染了很多节点. 自从我们通过AutoFocus智能威胁分析 ...

  7. Parameters.Add和Parameters.AddWithValue

    因为vs2013没有更新update 5所以Parameters.Add可以用Parameters.AddWithValue赋值无效 更新后可以. Parameters.AddWithValue的底层 ...

  8. 005_系统运维之SLA与SLO的关系

    服务水平协议(简称:SLA,全称:service level agreement)是在一定开销下为保障服务的性能和可靠性,服务提供商与用户间定义的一种双方认可的协定.通常这个开销是驱动提供服务质量的主 ...

  9. jquery模型(外壳实现)

    详细解释: 1.现在传入的参数是window,document,可以知道是它俩引用 2. 3. 4.每次调用jquery方法,都会创建一个实例,但是内存并没有暴涨,原因是:jquery里面new 的这 ...

  10. Ext.util.Format.date 时间格式的设置与转换

    Ext.util.Format.date 如下这段简单的代码:  var d = new Date(value.time); var s = Ext.util.Format.date(d, 'Y-m- ...