iOS_38_手势

Pan平移手势

最终效果图:

//
//  PanController.m
//  38_手势
//
//  Created by beyond on 14-9-16.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "PanController.h"

@interface PanController ()
// nana头像所在的View
@property (weak, nonatomic) IBOutlet UIView *nanaView;
- (IBAction)dismiss;

@end

@implementation PanController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 创建pan手势,并绑定监听方法
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panView:)];
    [self.nanaView addGestureRecognizer:pan];
}

- (void)panView:(UIPanGestureRecognizer *)pan
{

    switch (pan.state) {
        case UIGestureRecognizerStateBegan: // 开始触发手势

            break;

        case UIGestureRecognizerStateEnded: // 手势结束

            break;

        default:
            break;
    }

    // 1.在view上面挪动的距离
    CGPoint translation = [pan translationInView:pan.view];
    CGPoint center = pan.view.center;
    center.x += translation.x;
    center.y += translation.y;
    pan.view.center = center;

    // 2.清空移动的距离
    [pan setTranslation:CGPointZero inView:pan.view];
}

#pragma mark - 连线
- (IBAction)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
@end

Tap手势

//
//  TapController.m
//  38_手势
//
//  Created by beyond on 14-9-16.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "TapController.h"

// 手势代理
@interface TapController ()<UIGestureRecognizerDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *nanaImgView;

- (IBAction)dismiss;

@end

@implementation TapController

- (void)viewDidLoad
{
    [super viewDidLoad];
    _nanaImgView.userInteractionEnabled = YES;
    _nanaImgView.multipleTouchEnabled = YES;
    //[self testTap];
    [self testTap2];
}

- (void)testTap
{
    // 1.创建Tap手势识别器对象
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
    // 两根手势,连续敲击2次,手势才能识别成功
    tap.numberOfTapsRequired = 2;
    tap.numberOfTouchesRequired = 2;

    // 2.添加监听方法(识别到了对应的手势,就会调用监听方法)
    [tap addTarget:self action:@selector(taping)];

    // 3.为nanaImgView 添加Tap手势识别器对象
    [self.nanaImgView addGestureRecognizer:tap];
}

- (void)testTap2
{
    // 1.创建Tap手势识别器对象,同时绑定监听方法(识别到了对应的手势,就会调用监听方法)
    UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(taping)];
    // 2.设置手势的代理,目的是:决定手势只有在特定场合才会被识别(触发监听的方法)
    tap.delegate = self;
    // 3.为nanaImgView 添加Tap手势识别器对象
    [self.nanaImgView addGestureRecognizer:tap];
}
#define kRandomColor [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1.0]
// 监听的方法
- (void)taping
{
    // 每次tap,随机变换背景颜色
    self.view.backgroundColor = kRandomColor;
    NSLog(@"-----taping");
}
#pragma mark - gestureRecognizer的代理方法
//  当点击view的时候,会先询问这个方法,是否接收本次tap点击(即是否为有效tap)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    CGPoint pos = [touch locationInView:touch.view];
    // 点击图片的左半边有效,右半边无效
    if (pos.x <= self.nanaImgView.frame.size.width * 0.5) {
        return YES;
    }
    return NO;
}

#pragma mark - 连线方法
- (IBAction)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil];
}
@end

Swipe轻扫手势

LongPress长按手势

长按手势的主要属性参数

//
//  SwipeLongPressController.m
//  38_手势
//
//  Created by beyond on 14-9-17.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "SwipeLongPressController.h"

@interface SwipeLongPressController ()
@property (weak, nonatomic) IBOutlet UIImageView *nanaImgView;
- (IBAction)dismiss;

@end

@implementation SwipeLongPressController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 1.允许交互
    _nanaImgView.userInteractionEnabled = YES;

    // 2.自定义方法,添加swipe手势
    [self addSwipe];

    // 3.自定义方法,添加longPress手势
    [self addLongPress];
}

// 2.自定义方法,添加swipe手势
- (void)addSwipe
{
    // 1.创建Swipe手势识别器对象,同时绑定监听方法(识别到了对应的手势,就会调用监听方法)
    UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swiping)];
    // 设置属性:轻扫的方向
    swipe.direction = UISwipeGestureRecognizerDirectionUp;
    // 2.为nanaImgView 添加Swipe手势识别器对象
    [self.nanaImgView addGestureRecognizer:swipe];
}
// 3.自定义方法,添加longPress手势
- (void)addLongPress
{
    // 1.创建LongPress手势识别器对象,同时绑定监听方法(识别到了对应的手势,就会调用监听方法)
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];
    [longPress addTarget:self action:@selector(longPressing)];

    // 设置属性:至少长按2秒,默认0.5秒
    longPress.minimumPressDuration = 2;
    // 按下之后,不松手,在能触发手势之前,可允许移动的范围,50px范围内长按有效,默认是10px
    longPress.allowableMovement = 50;

    // 2.为nanaImgView 添加Swipe手势识别器对象
    [self.nanaImgView addGestureRecognizer:longPress];
}
#define kRandomColor [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1.0]
// 手势的监听的方法
- (void)swiping
{
    self.view.backgroundColor = kRandomColor;
    NSLog(@"-----swiping");
}
// 手势的监听的方法
- (void)longPressing
{
    self.view.backgroundColor = kRandomColor;
    NSLog(@"-------长按了nanaImgView");
}

- (IBAction)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil   ];
}
@end

















时间: 2024-10-08 14:39:40

iOS_38_手势的相关文章

vue手势解决方案

1.需求 因为项目中要做一个可以移动.旋转和放缩具有合成图片的功能,例如: 剑可以随意移动,然后把位移.旋转角度和放缩值传给后台进行合成. 2.解决方案 网上搜到手势插件AlloyFinger,https://github.com/AlloyTeam/AlloyFinger 首先安装AlloyFinger:npm install alloyfinger 然后在Vue文件里面引用:import AlloyFinger from 'alloyfinger' 使用方法: mounted() { thi

手势事件

1.基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发.返回true表示需要下发给下级视图,返回false表示不需要下发(交给自身的onTouchEvent处理).但是否最终下发,还需根据onInterceptTouchEvent的拦截结果. onInterceptTouchEvent : 判断当前容器是否需要拦截该事件.返回true表示予以拦截(交给自身的onTouchEvent处理).不放给下级视图,返回false表示不拦截该事件. onTo

【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap]2.作品展示站点 中的资源.特别的,来看一看我们能控制的.影响页面速度的重要因素 —— 文件大小,包括图片.CSS和 JavaScript 文件.只要简单几步,我们就可以给这些文件“瘦身”,缩短加载时间. A.1 优化图片 这些图片都通过 Photoshop 的 “保存为 Web 格式” 进行了一

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果.自定义滚动只有在特定的场景下才会被用到.这节课将会描述这样一种场景:使用scroller显示一种可滚动的效果. 你可以使用Scroller或者OverScroller来收集一些滑动动画所需要的数据.这两个类很相似,但是Ove

九点(九宫格)式手势解锁自定义view

周末闲着没事,写了个手势解锁的view,实现起来也蛮快的,半天多一点时间就完事.把源码和资源贴出来,给大家分享,希望对大家有用. 效果,就跟手机上的九点手势解锁一样,上个图吧: 过程嘛感觉确实没啥好讲的了,涉及的知识以前的博客都说过了,无非就是canva,paint,touch事件这些,画画圆圈画画线条,剩下的就是细节处理逻辑了.都在代码里,所以这里就主要是贴资源吧. 这个自定义view就一个类,源码如下: package com.cc.library.view; import android.

UIKit框架(16)手势识别器

UIGestureRecognizer 利用手势识别器,能够轻松识别用户在某个view上面做一些常见的手势 UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,使用它的子类才能处理具体的手势 UITapGestureRecognizer                敲击 UIPinchGestureRecognizer            捏合手势 UIPanGestureRecognizer               拖拽 UISwipeGestureRecog

2015-10-31 iOS 中的手势

UIkit框架中绝大多数的控件都是继承自,UIResponder类,UIResponder 类有强大的处理触摸事件的能力.假如一个UIview 收到一个触摸事件,那么这个触摸事件就会去进行寻找相应的响应事件,如果在该UIview 中找不到,就寻找UIView的对象去处理,如果UIView对象没有权利处理,就往当前的上一层UIViewController去寻找,如果找不到就再寻找 UIViewController 的对象去处理,如果这个对象仍然不能处理,就再往上层 UIWindow 对象去处理,如

iOS开发——仿Clear纯手势操作的UITableView

前言 在Clear应用中,用户无需任何按钮,纯靠不同的手势就可以完成对ToDoItem的删除.完成.添加.移动.具体来说,功能上有左划删除,右划完成,点击编辑,下拉添加.捏合添加.长按移动.这里将这些功能实现并记录. 左划删除与右划完成 所谓的左右滑动,就是自定义一个cell然后在上面添加滑动手势.在处理方法中计算偏移量,如果滑动距离超过cell宽度一半,就删除它,或者是为文本添加删除线等来完成它:如果没有超过一半,那么就用动画把cell归位. 效果图如下: 关键代码如下: - (void)ha

iOS小米遥控器的手势监听及UI实现

这篇文章通过实例实现了一个类似小米手势遥控器的功能页面. 效果图如下所示: 触摸事件的响应通过对系统的触摸实践监听来进行. 通过一个数组来对点的集合进行缓存和分析. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (!self.allowsInteraction) return; UITouch *touch = [touches anyObject]; CGPoint start = [touch lo