zoukankan      html  css  js  c++  java
  • 自定义UIPageControl 控件(二)

    使用UIPageControl的例子如前面所示。但光以控件形式使用 UIPageControl还是不好用,因为虽然用户能通过手指扫动UIPageControl控件进行翻页,但UIPageControl控件在屏幕上所占的区域还是太小了,如果用户在整个屏幕都能通过扫动来进行翻页就更好了,这无疑大大增强的用户的体验。

    这需要我们增加一个UIView控件,让它占据屏幕的整个区域。让UIView能识别用户手指扫动的手势,即几个touchesXXX方法。这样用户在屏幕上滑动手指时,实际上会被UIView捕捉为扫动手势。

    首先,我们来实现这个UIView。新建类 SwipeView。SwipeView借鉴了《iPhone开发秘籍》中 Henry Yu 的实现,甚至我们都不需要做多少改变。

    #import <UIKit/UIKit.h>

    #import <QuartzCore/QuartzCore.h>

    @interface SwipeView : UIView {

    CGPoint startTouchPosition;

    NSString *direction;

    UIViewController *host;

    }

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

    @end

    #import "SwipeView.h"

    @implementation SwipeView

    - (id)initWithFrame:(CGRect)frame {

        if ((self = [super initWithFrame:frame])) {

            // Initializationcode

        }

        return self;

    }

    - (void) setHost: (UIViewController *) aHost

    {

    host = aHost;

    }

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    {

    UITouch *touch = [touches anyObject];

    startTouchPosition = [touch locationInView:self];

    direction = NULL;

    }

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

    {

    UITouch *touch =touches.anyObject;

    CGPoint currentTouchPosition =[touch locationInView:self];

    #defineHORIZ_SWIPE_DRAG_MIN 12

    #defineVERT_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) {

    direction = kCATransitionFromLeft;

    }

    else

    direction = kCATransitionFromRight;

    }

    }

    - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

    {

    if (host!=nil && direction) {

    SEL sel=NSSelectorFromString(@"swipeTo:");

    if([host respondsToSelector:sel]) {

    [host performSelector:sel withObject:direction];

    }

    }

    @end

    首先,打开我们前面所做的工程UsingPageControl。

    在UsingPageControlVeiwController中导入头文件SwipeView.h。将UsingPageControlViewController中的pageView修改为SwipeView类型。

    同时在pageView的初始化时使用SwipeView的initWithFrame方法,并调用setHost:方法:

    pageView=[[SwipeView alloc]initWithFrame:contentFrame];

    [pageView setHost:self];

    接下来,我们需要在SwipeView的Host类UsingPageControlVeiwController实现指定的swipeTo:方法:

    // SwipeView 的协议(委托)方法

    - (void) swipeTo: (NSString *) aDirection

    {

    NSLog(@"swipe to");

    int to=previousPage;

    if ([aDirection isEqualToString:kCATransitionFromRight])

    {

    to++;

    }else {

    to--;

    }

    if (to>=0 && to<=2) {

    // pageCtrl的值改变并调用pageTuren方法

    [self transitionPage:previousPage toPage:to];

    previousPage=pageCtr.currentPage=to;

    }

    }


  • 相关阅读:
    transition的属性变化
    transition过渡动画
    增删改查的45道题
    4月18 数据库的CRUD操作
    php 中输入输出提交
    4月12 php练习
    3月29 表单以及正则表达式
    3月27 隐藏导航
    3月26 document的练习
    3月25 JavaScript 练习题
  • 原文地址:https://www.cnblogs.com/encounter/p/2188462.html
Copyright © 2011-2022 走看看