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. Python里面这些点,据说80%的新手都会一脸懵逼

    Python里面这些点,据说80%的新手都会一脸懵逼 菜鸟Python 关注 2018.10.10 12:51 字数 1833 阅读 123评论 0喜欢 10 Python虽然语法简单,通俗易懂,但是 ...

  2. C语言复习---杨辉三角打印

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math ...

  3. bzoj千题计划248:bzoj3697: 采药人的路径

    http://www.lydsy.com/JudgeOnline/problem.php?id=3697 点分治 路径0改为路径-1 g[i][0/1] 和 f[i][0/1]分别表示当前子树 和 已 ...

  4. bzoj千题计划195:bzoj2844: albus就是要第一个出场

    http://www.lydsy.com/JudgeOnline/problem.php?id=2844 题意:给定 n个数,把它的所有子集(可以为空)的异或值从小到大排序得到序列 B,请问 Q 在  ...

  5. 兼容 IE6+ 获取图片大小

    昨天说了 HTML5 的file对象可以获取到文件的 文件名,文件大小,文件类型,最后一次修改日期.其实 IE6-9 也可以变向的获取到,虽然没那么方便,但至少可以取到.来看例子吧: <!doc ...

  6. javascript私有方法揭示为公有方法

    揭示模式可用于将私有方法暴露为公共方法.当为了对象的运转而将所有功能放置在一个对象中以及想尽可能地保护该对象,这种揭示模式就非常有用. 板栗: var myarray; (function(){ va ...

  7. 一组数字,从1到n,从中减少了3个数,顺序打乱,放在n-3的数组里,找出丢失数字

    曾经看到有这样一个JS题:有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里请找出丢失的数字,最好能有程序,最好算法比较快假设n=10000 下面我也来贴一个算法. func ...

  8. VMware Linux 下 Nginx 安装配置 (一)

    资源准备 1. pcre-8.34.tar.gz: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 2. zlib-1.2.8.tar.g ...

  9. Java使用WebSocket

    网页端的消息推送,一般有以下方式: 轮询方式:客户端定时向服务端发送ajax请求,服务器接收到请求后马上返回消息并关闭连接. 优点:后端程序编写比较容易. 缺点:TCP的建立和关闭操作浪费时间和带宽, ...

  10. 图的最短路径-----------SPFA算法详解(TjuOj2831_Wormholes)

    这次整理了一下SPFA算法,首先相比Dijkstra算法,SPFA可以处理带有负权变的图.(个人认为原因是SPFA在进行松弛操作时可以对某一条边重复进行松弛,如果存在负权边,在多次松弛某边时可以更新该 ...