滑动方向的检测和侧滑效果,自己可以定义,或者上啦刷新的制作基础

滑动方向的检测和侧滑效果,自己可以定义,或者上啦刷新的制作基础

序言:

在iPhone开发里面,经常看到手指在触摸屏上拖动时,可以让画面左右移动,就像侧滑效果一样。今天,我们要做一个效果。。

正文:

第一步:

我们要创建3个枚举量,来表示画面的状态。。。。代码如下:

typedef enum
{
    //原状态
    KYuanTai,
    //横向滑动
    KHengTai,
    //纵向滑动
    KZongTai,
}DirectionForSlide;

枚举类型定义有好几种。。。这是其中一种。。。

第二步:我们创建4个对象。。代码:

//创建几个对象

    UILabel*_label;//显示标题的作用

    CGPoint  _touchBegan;//手指开始触摸的位置

    CGPoint  _labelOrigin;//记录_label的原位置

    DirectionForSlide *_ZSJdirection;//选取枚举的标志

第三步:

创建我们的移动画面的对象。。。

 _label=[[UILabel alloc]initWithFrame:self.view.bounds];

    _label.backgroundColor=[UIColor whiteColor];

    _label.textAlignment=NSTextAlignmentCenter;//此处已经改变。以前的代码也可以使用,但是,有警告
    //_label.textAlignment=UITextAlignmentCenter;

    [email protected]"可以上下左右滑动";

    //让_label自动适合位子

    _label.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

    [self.view addSubview:_label];

第四步;:我们创建一个监控台,来监控。。。代码如下:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(suspend) name:UIApplicationWillResignActiveNotification object:nil];

第五步:这是我们今天的重点,各种方法的使用

1、手指开始触摸屏幕,,代码:

//手指开始触摸手机屏幕
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

   //首先,要保存触摸的位子
    _touchBegan=[[touches anyObject] locationInView:self.view];
    //保存标签的原位置
    _labelOrigin=_label.center;

  //初始化运动方向
    _ZSJdirection=KYuanTai;//开始保持原太

}

2、手指开始移动,并判断手指滑翔的方向,,代码:

//下面是手值在手机 屏幕上开始移动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    static const NSInteger KYiDongJuLi= 10;
    //获得手指当前触摸的位置,并保存
    CGPoint  point=[[touches  anyObject] locationInView:self.view];

   //下面处理初始的位置和现在的位置的坐标差

    NSInteger    disZUOYOU=point.x-_touchBegan.x;

    NSInteger    disShangXia=point.y-_touchBegan.y;

    if (KYuanTai ==_ZSJdirection) {

        //判断方向

        if (ABS( disZUOYOU)>ABS(disShangXia)) {

          //横向运动
            if ( KYiDongJuLi <=ABS(disZUOYOU)) {

                _ZSJdirection=KHengTai;
            }

        }else{

            //纵向
            if (KYiDongJuLi<=ABS(disShangXia)) {
                _ZSJdirection=KZongTai;
            }
        }
    }

    if (KYuanTai !=_ZSJdirection) {

        //判断移动的距离

        //获得开始的标签的位子
//        CGFloat newpoint=0;

        if (KHengTai ==_ZSJdirection) {

            _label.frame=CGRectMake(disZUOYOU, 0, 320, self.view.frame.size.height);

        }

        else{

          _label.frame=CGRectMake(0, disShangXia, 320, self.view.frame.size.height);        }

        //移动的目标点
        //_label.center.x=100;

    }

}

//3.自动返回嗲吗a

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

//      [UIView beginAnimations:nil context:nil];
//
//    _label.center=self.view.center;
//
//    [UIView  commitAnimations];
//    

}

3、手机睡眠,或者有电话接入

//手机睡眠,或有电话接入时
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

    [self   touchesEnded:touches withEvent:event];//调用手指离开手机屏幕时的方法
}

4、监控方法的 调用

-(void)suspend
{

    [self  touchesCancelled:nil withEvent:nil];
}

效果展示:

                            

                         

完整代码:

.h文件

#import <UIKit/UIKit.h>
typedef enum
{
    //原状态
    KYuanTai,
    //横向滑动
    KHengTai,
    //纵向滑动
    KZongTai,
}DirectionForSlide;
@interface ViewController : UIViewController

{
  //创建几个对象

    UILabel*_label;//显示标题的作用

    CGPoint  _touchBegan;//手指开始触摸的位置

    CGPoint  _labelOrigin;//记录_label的原位置

    DirectionForSlide *_ZSJdirection;//选取枚举的标志

}

@end

.m文件

#import "ViewController.h"

@implementation ViewController
//首先创建一个结构体(即是枚举)

-(void)viewDidLoad{

    [super viewDidLoad];
    self.view.backgroundColor=[UIColor redColor];

    _label=[[UILabel alloc]initWithFrame:self.view.bounds];

    _label.backgroundColor=[UIColor whiteColor];

    _label.textAlignment=NSTextAlignmentCenter;//此处已经改变。以前的代码也可以使用,但是,有警告
    //_label.textAlignment=UITextAlignmentCenter;

    [email protected]"可以上下左右滑动";
          //让_label自动适合位子
     _label.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
         [self.view addSubview:_label];
         //创建一个观察,监控
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(suspend) name:UIApplicationWillResignActiveNotification object:nil];
      }
//手指开始触摸手机屏幕
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    //首先,要保存触摸的位子
    _touchBegan=[[touches anyObject] locationInView:self.view];
    //保存标签的原位置
    _labelOrigin=_label.center;
   //初始化运动方向
    _ZSJdirection=KYuanTai;//开始保持原太
 }

//下面是手值在手机 屏幕上开始移动
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
     static const NSInteger KYiDongJuLi= 10;
    //获得手指当前触摸的位置,并保存
    CGPoint  point=[[touches  anyObject] locationInView:self.view];
    //下面处理初始的位置和现在的位置的坐标差
     NSInteger    disZUOYOU=point.x-_touchBegan.x;
     NSInteger    disShangXia=point.y-_touchBegan.y;
         if (KYuanTai ==_ZSJdirection) {

        //判断方向
                if (ABS( disZUOYOU)>ABS(disShangXia)) {
           //横向运动
            if ( KYiDongJuLi <=ABS(disZUOYOU)) {
                _ZSJdirection=KHengTai;
            }
         }else{
            //纵向
            if (KYiDongJuLi<=ABS(disShangXia)) {
                _ZSJdirection=KZongTai;
            }
        }
    }
     if (KYuanTai !=_ZSJdirection) {
         //判断移动的距离
         //获得开始的标签的位子
//        CGFloat newpoint=0;
         if (KHengTai ==_ZSJdirection) {
             _label.frame=CGRectMake(disZUOYOU, 0, 320, self.view.frame.size.height);
         }
         else{
            _label.frame=CGRectMake(0, disShangXia, 320, self.view.frame.size.height);        }

        //移动的目标点
        //_label.center.x=100;
     }
 }
  //手指停止移动,放开手指,标签返回到原来的位置
  -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

//      [UIView beginAnimations:nil context:nil];
//
//    _label.center=self.view.center;
//
//    [UIView  commitAnimations];
//
     NSMutableArray*arr=[NSMutableArray arrayWithCapacity:0];
 }

//手机睡眠,或有电话接入时
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

    [self   touchesEnded:touches withEvent:event];//调用手指离开手机屏幕时的方法
}

-(void)suspend
{
    [self  touchesCancelled:nil withEvent:nil];
}

@end

友情快递:

NSMutableArray的使用方法

NSMutableArrayv的方

该方法的作用
  + (id)arrayWithCapacity:(NSUInteger)numItems 创建一个指定初始化长度的数组
- (void)addObject:(id)anObject 添加一个元素
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index 在指定位置添加一个元素
- (void)removeObjectAtIndex:(NSUInteger)index 删除一个数组元素
时间: 2024-11-07 20:21:27

滑动方向的检测和侧滑效果,自己可以定义,或者上啦刷新的制作基础的相关文章

slidingmenu+fragment实现常用的侧滑效果(包括Fragment状态的保存)

一.需求 关于fragment的问题,一直想写一篇博客了,应该当初自己也是对这玩意一点都不熟悉到现在也大概知道个日常的使用的地步. 一个侧滑的导航栏,内有4个条目,每个选项点击进入对应的界面,每一个界面是一个fragment,各界面之间自由切换,且可以保存之前的状态,也就是说,切换的过程并不会产生新的对象,不会重新去new 一个fragment对象,不需要每次点击重新加载数据,这里就涉及了一个很重要的问题,fragment状态的保存,在这篇文章里,我尽量用实例把这个问题说清楚,毕竟当初也是查了不

Android使用DrawerLayout仿qq6.6版本侧滑效果

一讲到侧滑菜单,我相信大家都会想到一个开源控件SlidingMenu,在google还没有出来DrawerLayout的时候几乎都是使用Slidingmenu来实现侧滑效果,可以说是效果很不错,自从google出了Drawerlayout以后很多公司就使用了Drawerlayout比如 滴滴打车等等.那么今天我们利用drawerlayout来实现qq6.6最新的侧滑效果.首先来看看Drawerlayout默认的效果: 和目前最新版的qq的侧滑还是不一样的区别就是内容页面没有跟随向右滑动,而是菜单

闹钟AlarmAndMusic 滑动调整时间和页面旋转风车效果《IT蓝豹》

闹钟AlarmAndMusic 滑动调整时间和页面旋转风车效果 闹钟AlarmAndMusic 和支持播放音乐效果的,上下滑动调整时间和页面旋转风车效果,由于制作的gif有些问题,效果不明显,欢迎下载使用看看真实的效果.本例子主要由AlertActivity和AlarmService和AlarmAlertWakeLock三个类完成.AlarmAlertWakeLock主要代码:public class AlarmAlertWakeLock {    private static PowerMan

iOS开发中常用的轮子 第四篇 抽屉和侧滑效果

为避免重复造轮子,很多效果和功能都可以从github上找到.清点以前的项目,整理出了很多用过的开源代码,每天奉送一批. 学习例子的方法: 1,了解:运行一遍例子,弄清这些代码的究竟是什么: 2,使用:在之后开发工程中使用这些例子: 3,研究代码:研究例子的代码的实现,简单修改做出自己的效果. 记得要么是facebook,或是twitter第一个使用了个交互效果:而后风靡全球,是产品必用抽屉:再后来就是延生出了各种变形过的效果: 所以,产品经理要你实现抽屉和侧滑效果时,一定要确定到底是什么样抽屉和

判断UISrollview的滑动方向

很常用的一个功能,就记录下来了. -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { historyY = scrollView.contentOffset.y; } -(void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.contentOffset.y<historyY) { NSLog(@"down"); } els

Menu史上最牛的侧滑效果

GAG-master史上最牛的侧滑效果,其中加载图片展示的时候也是慢慢翻转效果,侧滑Menu更是牛逼.  其中自定义BlurFoldingActionBarToggle 提供了onDrawerOpened()和onDrawerClosed()方法,  然后在这两个方法里面设置打开和关闭等各项操作. 运行效果: 查看完整源码地址:http://www.itlanbao.com/code/20150909/10000/100518.html package me.storm.ninegag; imp

ViewPagerIndicator 取代TabHost,实现滑动tab,引导页等效果

https://github.com/eltld/ViewPagerIndicator 取代TabHost,实现滑动tab,引导页等效果

用HTML和javascript(JS)计算触屏手机手指滑动方向的演示

移动终端的流行,程序员希望通过HTML+JS完成触屏动作的识别.下面给出具体实现的例子,供大家参考. 将下面的代码复制并保存,用手机访问,现在的手机浏览器一般都支持触屏,针对本演示来讲就是支持三个js事件: 1.touchstart---手指开始触摸事件,此事件可以获取起始坐标,将起始坐标保存在pressX 和pressY 中. 2.touchmove---手机触摸移动时间,只要手机不离开指定元素,就不停的将手机的新坐标通过事件发给页面上的js代码.通过计算此事件获取的当前坐标与起始坐标的差,就

UIPanGestureRecognizer上下左右滑动方向判断算法

CGFloat const gestureMinimumTranslation = 20.0; typedef enum :NSInteger { kCameraMoveDirectionNone, kCameraMoveDirectionUp, kCameraMoveDirectionDown, kCameraMoveDirectionRight, kCameraMoveDirectionLeft } CameraMoveDirection; @interfaceViewController