本文摘自:http://tech.it168.com/a2011/0620/1206/000001206580_2.shtml

代码下载

 iPhone SDK开发基础之UIPageControl编程

  当用户界面需要按页面进行显示时,使用iOS提供的UIPageControl控件将要显示的用户界面内容分页进行显示会使编程工作变得非常快捷,如图3-47所示就是一个使用UIPageControl控件逐页进行图片显示的程序,用户按下屏幕即可进行左右滚动显示,在屏幕的正上方使用白色的点显示当前滚动到的页面位置。


▲图3-47 UIPageControl编程实例界面

  程序自定义一个SwipeView类,该类通过子类化UIView类并重载其touchesMoved()方法捕获用户滚动的方向,类的定义如下。

//  SwipeView.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface SwipeView : UIView {
    CGPoint startTouchPosition;
    NSString *dirString;
    UIViewController *host;
}

- (void) setHost: (UIViewController *) aHost;

@end

//  SwipeView.m
#import "SwipeView.h"

@implementation SwipeView

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
    }
    return self;
}

- (void) setHost: (UIViewController *) aHost
{
    host = aHost;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    startTouchPosition = [touch locationInView:self]; 
    dirString = NULL;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = touches.anyObject; 
    CGPoint currentTouchPosition = [touch locationInView:self]; 
    
#define HORIZ_SWIPE_DRAG_MIN 12 
#define VERT_SWIPE_DRAG_MAX 4 
    
    if (fabsf(startTouchPosition.x - currentTouchPosition.x) >= 
        HORIZ_SWIPE_DRAG_MIN && 
        fabsf(startTouchPosition.y - currentTouchPosition.y) <= 
        VERT_SWIPE_DRAG_MAX)     { 
        // Horizontal Swipe
        if (startTouchPosition.x < currentTouchPosition.x) {
            dirString = kCATransitionFromLeft;
        }
        else 
            dirString = kCATransitionFromRight;
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    if (dirString) [host swipeTo:dirString];
}

@end

  在捕获用户滚动的方向后,SwipeView类通过用户设置的host成员变量回调其swipeTo()方法,host成员变量在类中定义为UIViewController,在编译时编译器会产生警告,这里不用管它,只需要SwipeView类的使用者设置host成员变量并实现swipeTo()方法即可。

  SwipeView类的使用者为PageViewController类,该类实现程序的主界面,在这个自定义的UIViewController类中实现swipeTo()方法,代码如下。

//  PageViewController.m
- (void) swipeTo: (NSString *) aDirection{
    UIPageControl *pageControl = [[[contentView superview] subviews] lastObject];
    
    if ([aDirection isEqualToString:kCATransitionFromRight])
    {
        if (currentPage == 5) return;
        [pageControl setCurrentPage:currentPage + 1];
    } else {
        if (currentPage == 0) return;
        [pageControl setCurrentPage:currentPage - 1];
    }
    
    [self pageTurn:pageControl];
}

  在该回调方法中根据用户滚动的方向来设置UIPageControl的currentPage属性,如果是向右方滚动则页面计数加一,如果用户滚动的方向是向左,则页面计数减一。设置UIPageControl的currentPage属性以后,PageViewController对象再调用其pageTurn()方法交换页面显示内容,并将图片显示出来,代码如下。

- (void) pageTurn: (UIPageControl *) pageControl{
    CATransition *transition;
    int secondPage = [pageControl currentPage];
    if ((secondPage - currentPage) > 0)
        transition = [self getAnimation:@"fromRight"];
    else
        transition = [self getAnimation:@"fromLeft"];
    
    UIImageView *newView = (UIImageView *)[[contentView subviews] objectAtIndex:0];
    [newView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"ipad_ wallpaper%02d.jpg", secondPage + 1]]];
    [contentView exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
    [[contentView layer] addAnimation:transition forKey:@"transitionView Animation"];
    
    currentPage = [pageControl currentPage];
}

  在主pageTurn()方法实现中,PageViewController类通过UIView的exchangeSubview AtIndex()方法实现页面内容的切换。

  本节相关的完整Xcode工程源代码文件请参考本书附带的光盘中的PageControl工程。

转载于:https://www.cnblogs.com/85538649/archive/2011/11/09/2242478.html

iphone pageController 的实现相关推荐

  1. iPhone 14 与iPhone 13

    iPhone 14 与iPhone 13 iPhone14Pro配置曝光:感叹号+4800w像素 | 小米12Ultra 最新套壳图 距离下一代iPhone发布还有半年之久,关于iPhone14系列的 ...

  2. iphone smtp服务器没有响应,电子邮件卡在iPhone或iPad上的发件箱?如何修复iOS中的未发送邮件 | MOS86...

    您曾经在iOS中发送电子邮件,只能将信息卡在iPhone,iPad或iPod touch的邮件应用发件箱中?你知道这是什么时候发生的,因为在iOS的Mail应用程序的底部,状态栏在iOS中显示1个未发 ...

  3. iphone html邮件发送,html – iPhone邮件:由于锚标记,表格不会延伸到100%?

    我正在设计一个html简报,到目前为止每个电子邮件客户端都运行正常. 在移动设备上,它应该伸展到100%宽度,这是迄今为止的. 但: 在邮件打开时的iphone邮件中,我看到百分之百的宽度,直到那时右 ...

  4. iPhone PHP获取文件,IOS中获取各种文件的目录路径的方法

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  5. ios(iphone/ipad)开发笔记(1)

    CGContextRefCGContextRef iphone开发刚刚入门 求个师傅 iphone拨号键盘 请问自己如果做sdk OpenGL ES 2.0有没有顶点光照的例子? socket通信哪位 ...

  6. 手机如何看python代码_python如何绘制iPhone手机图案?(代码示例)

    本篇文章给大家带来的内容是介绍python如何绘制iPhone手机图案?(代码示例).有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 虽然我用不起苹果手机,但我可以用python画出 ...

  7. web浏览器_如何在iPhone和iPad上更改默认的Web浏览器

    当我们使用每一款设备的时候,都会有自带的浏览器,不过通常情况下大家很少用到它,因为它不如第三方的浏览器好用.不过幸运的是Apple发布iOS 14和iPadOS 14时,它进行了一项更改,使第三方浏览 ...

  8. iphone清理缓存小技巧_苹果手机清理垃圾小技巧!小内存也不发愁

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都会有分享,都是免费订阅,请您放心关注.注图文来源网络,侵删 时至 ...

  9. 苹果手机怎么设置时间24小时制_外媒实测苹果iPhone 12续航:5G网络下表现不佳...

    外媒Tom's Guide已经对iPhone 12和iPhone 12 Pro进行了电池测试,结果并不太理想. 与Android旗舰机相比,苹果的新手机在续航测试中败下阵来,尤其是在5G网络上. To ...

最新文章

  1. zabbix自动化监控8(2.4)
  2. 【BZOJ】4259: 残缺的字符串 FFT
  3. MongoDB增加用户认证:增加用户、删除用户、修改用户密码、读写权限、只读权限...
  4. redis 入门教程
  5. 微软自家的.Net下的JavaScript引擎——ClearScript
  6. 盘点2021年Linux界的12件大事
  7. ubuntu更新python的指令_ubuntu下python模块的库更新(转载)
  8. 性能测试的几个参数概念
  9. python什么是数据结构_python算法与数据结构-数据结构介绍(38)
  10. JavaScript编程艺术-第7章代码汇总(2)
  11. 内联滴灌行业调研报告 - 市场现状分析与发展前景预测
  12. c语言打印uint64, int64
  13. 51单片机ADC模数转换
  14. 短信、长短信、彩信的PDU
  15. python在地图上标注点_怎样用python画地图上的标注线
  16. MSDTC无法启动的解决办法
  17. adb 打开 diag 端口用qpst备份恢复qcn
  18. 8.2 Affine independence (仿射无关性)
  19. 利用框架效应达成目的
  20. GitHub开源项目学习 电商系统Mall (三) SpringBoot+MyBatis搭建基本骨架

热门文章

  1. [Ext JS6实战] Ajax获取Tree Store
  2. java 前端导出exvel_java导出数据到Excel文件 前端进行下载
  3. 事业单位计算机知识c语言,事业单位考试计算机基础知识C语言程序设计
  4. 为什么java button 不能用 显示红色_Java中的整型包装类值的比较为什么不能用==比较?原因是因为缓存...
  5. 无线通信信道的衰落特性(大尺度衰落和小尺度衰落)
  6. Python中使用xpath获取select option的每一行的text和value
  7. IDEA中提示JAVA字符串常量过长
  8. pythonplot画多图间隔,matplotlib实现一页多图
  9. acill排序 java_字符串ASCII码排序
  10. java 获取项目下的webapp_Spring Boot2 系列教程(一)纯 Java 搭建 SSM 项目