5.2 GestureRecognizer---UI手势

2019-04-15  本文已影响0人  草根小强

GestureRecognizer---UI手势

#import "AppDelegate.h"
#import "HomeViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    _window.backgroundColor = [UIColor whiteColor];
    [_window makeKeyAndVisible];
    
    HomeViewController *home = [[HomeViewController alloc] init];
    UINavigationController *nav =[[UINavigationController alloc] initWithRootViewController:home];
    
    
    _window.rootViewController = nav;
    return YES;
}

基础控制器

#import <UIKit/UIKit.h>
#define COLOR [UIColor colorWithRed:arc4random()%255 / 255.0 green:arc4random()%255 / 255.0 blue:arc4random()%255 / 255.0 alpha:1]
@interface BasseViewController : UIViewController

@end
#import "BasseViewController.h"

@interface BasseViewController ()

@end

@implementation BasseViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = NSStringFromClass([self class]);
    
    //随机颜色
    //取值范围0 - 1 arc4random() % 255取值0-254 个值  然后除 255.0 就是0-1范围,
    
    //取值范围 0 - 1
    UIColor *color = [UIColor colorWithRed:arc4random()%255 / 255.0 green:arc4random()%255 / 255.0 blue:arc4random()%255 / 255.0 alpha:1];
    self.view.backgroundColor = color;
    
    //产生一个灰度颜色  只包含黑白两种颜色   1 表示黑  0表示白
//    UIColor *color1 = [UIColor colorWithWhite:0.5 alpha:1];
    
    
}

@end

导航栏视图控制器,

#import <UIKit/UIKit.h>

@interface HomeViewController : UIViewController

@end
#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *arr = @[@"TouchViewController",@"TapViewController",@"LongPressViewController",@"SwipeViewController",@"PanViewController",@"RotationViewController",@"PinchViewController",@"DoubleViewController"];
    for (int i = 0; i < arr.count; i ++) {
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 84 + 64*i, [UIScreen mainScreen].bounds.size.width, 44)];
        button.backgroundColor = [UIColor blueColor];
        [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
        
        [button setTitle:arr[i] forState:UIControlStateNormal];
        [self.view addSubview:button];
    }
}
- (void)buttonClicked:(UIButton *)button{
    
    Class class = NSClassFromString(button.titleLabel.text);
    
    UIViewController *vc = [[class alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
}
@end

根试图控制器

#import <UIKit/UIKit.h>

@interface HomeViewController : UIViewController

@end
#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *arr = @[@"TouchViewController",@"TapViewController",@"LongPressViewController",@"SwipeViewController",@"PanViewController",@"RotationViewController",@"PinchViewController",@"DoubleViewController"];
    for (int i = 0; i < arr.count; i ++) {
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 84 + 64*i, [UIScreen mainScreen].bounds.size.width, 44)];
        button.backgroundColor = [UIColor blueColor];
        [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
        
        [button setTitle:arr[i] forState:UIControlStateNormal];
        [self.view addSubview:button];
    }
}
- (void)buttonClicked:(UIButton *)button{
    
    Class class = NSClassFromString(button.titleLabel.text);
    
    UIViewController *vc = [[class alloc] init];
    [self.navigationController pushViewController:vc animated:YES];
}
@end

单击手势

#import "BasseViewController.h"

@interface TouchViewController : BasseViewController

@end
#import "TouchViewController.h"

@interface TouchViewController ()

@end

@implementation TouchViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 84, 120, 60)];
    label.text= @"让子弹多飞一下";
    label.tag = 11;
    label.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:label];
}
static CGPoint  labelSrcOrigin;
static CGPoint  userSrcOrigin;

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    //如何获取用户触摸的点
    
//    //1. 单点
//    //获取触摸类型
//    UITouch *touch = [touches anyObject];
//    //获取视图对象的地点
//    CGPoint point = [touch locationInView:self.view];
//    
//    //打印触摸点的地址
//    //NSStringFromCGPoint(point) 将point转换成字符
//    NSLog(@"%@",NSStringFromCGPoint(point));
    //2. 多点
    for (UITouch *touch in [event allTouches]){
    CGPoint point = [touch locationInView:self.view];
        NSLog(@"%@",NSStringFromCGPoint(point));
    }
    UILabel *label = (id)[self.view viewWithTag:11];
    labelSrcOrigin = label.frame.origin;
    UITouch *touch = [touches anyObject];
    userSrcOrigin =  [touch locationInView:self.view];
   }
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{   
    UITouch * touch = [touches anyObject];
    CGPoint pstPoint = [touch locationInView:self.view];
    //用户触摸移动产生的偏差量
    CGFloat _x = pstPoint.x - userSrcOrigin.x;
    CGFloat _y = pstPoint.y - userSrcOrigin.y;   
    UILabel * label = (id)[self.view viewWithTag:11];
    label.frame = CGRectMake(labelSrcOrigin.x + _x, labelSrcOrigin.y + _y, label.frame.size.width, label.frame.size.height);
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
  }
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{

}
@end

双击手势


    
 #import "TapViewController.h"

@interface TapViewController ()

@end

@implementation TapViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
//    UIGestureRecognizer 手势父类
//    [重点] 任何一个手势对象 不能被添加到两个视图上
  
//    第一种
//    //双击手势
//    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapped:)];
//    doubleTap.numberOfTapsRequired = 2;
//    
//    //所有UIView 的对像都有一个添加手势的方法
//    [self.view addGestureRecognizer:doubleTap];
    
//    //双击手势
   
    
    UITapGestureRecognizer * doubleTgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapped:)];
   
    doubleTgr.numberOfTapsRequired = 2;
    [self.view addGestureRecognizer:doubleTgr];
    
    
//
    UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
    //numberOfTapsRequired = 1为单击
    tgr.numberOfTapsRequired = 1;
    //需要几只手指共同点击(这里是两只手指)
    tgr.numberOfTouchesRequired = 2;
    //响应tgr必须在doubleTgr不成立的情况下
    [tgr requireGestureRecognizerToFail:doubleTgr];
    
    // 所有UIView的对象都有一个添加手势的方法
//    [self.view addGestureRecognizer:tgr];
    
    
    
    
    
//    UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
//    //区分单机和双击   1为单机  2 为双击  3 为三击
//    tgr.numberOfTapsRequired = 1;
//    tgr.numberOfTapsRequired = 2;
//    //响应tgr必须在doubleTgr不成立的情况下
//    [tgr requireGestureRecognizerToFail:doubleTap];
//
//    //需要几只手指共同点击
//    tgr.numberOfTapsRequired = 2;
//    [self.view addGestureRecognizer:tgr];
//    
    
}
- (void)tapped:(UITapGestureRecognizer *)tgr{
    
    
    self.view.backgroundColor =[UIColor yellowColor];
    
}
- (void)doubleTapped:(UITapGestureRecognizer *)tgr{
    
    self.view.backgroundColor = [UIColor whiteColor];
   }
@end

长按手势

#import "LongPressViewController.h"
#define COLOR [UIColor colorWithRed:arc4random()%255 / 255.0 green:arc4random()%255 / 255.0 blue:arc4random()%255 / 255.0 alpha:1]
@interface LongPressViewController ()

@end

@implementation LongPressViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //创建长按手势对象
    
    UILongPressGestureRecognizer *logr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(pressed:)];
    //长按时长
    logr.minimumPressDuration = 3;
    //需要的手指数
    logr.numberOfTouchesRequired = 2;
    //将手势添加到视图上
    [self.view addGestureRecognizer:logr];
    
    
    
}
/*
 手势的状态:
     手势开始
     手势结束
     手势失败
 
 */

- (void)pressed:(UILongPressGestureRecognizer *)logr{
    //代表手势开始
    if (logr.state == UIGestureRecognizerStateBegan) {
        self.view.backgroundColor = [UIColor whiteColor];
    }
    
}
@end

滑动手势

#import "SwipeViewController.h"

@interface SwipeViewController ()

@end

@implementation SwipeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //滑动手势
    UISwipeGestureRecognizer *sgr = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipped:)];
//    UISwipeGestureRecognizerDirectionRight
//    UISwipeGestureRecognizerDirectionLeft
//    UISwipeGestureRecognizerDirectionUp
//    UISwipeGestureRecognizerDirectionDown
    //滑动的方向
    //右滑
    //一个滑动手势只能监听一个方向的滑动 (默认方向为右)
    sgr.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:sgr];
}
- (void)swipped:(UISwipeGestureRecognizer *)swip{
    self.view.backgroundColor = [UIColor orangeColor];
}
@end

捏合手势

#import "PinchViewController.h"

@interface PinchViewController ()

@end

@implementation PinchViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 81, 150, 180)];
    imageView.image = [UIImage imageNamed:@"QFImage_2016-01-26_14.48.9"];
    imageView.tag = 11;
     imageView.userInteractionEnabled = YES;
    [self.view addSubview:imageView];
    //【捏合手势】
    UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinching:)];
    
    [imageView addGestureRecognizer:pinch];
}

- (void)pinching:(UIPinchGestureRecognizer *)pinch {
    //每一秒执行一次
    //1,  1 :
    //2,  1 : 1.2    1
    //3,  1 : 1.2    1
    
    //2W   4W   16W    8
    //   2    4        8
    //获取图片的tag 也就是 图片
    UIImageView * imageView = (id)[self.view viewWithTag:11];
    
    //imageView.transform 表示的是时间
    //pinch.scale 表示的是x
    //pinch.scale表示的是y
    imageView.transform = CGAffineTransformScale(imageView.transform, pinch.scale, pinch.scale);
    
    //缩放比例执行完一次就置为与当前值一致的比例
    pinch.scale = 1;
    
    //    static CGAffineTransform trans;
    //    if (pinch.state == UIGestureRecognizerStateBegan) {
    //        trans = imageView.transform;
    //    }
    //    //获取缩放比
    //    CGFloat scale = pinch.scale;
    //
    //    imageView.transform = CGAffineTransformScale(trans, scale, scale);
}

@end

旋转手势

#import "RotationViewController.h"

@interface RotationViewController ()

@end

@implementation RotationViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 81, 150, 180)];
    imageView.image = [UIImage imageNamed:@"QFImage_2016-01-26_14.48.9"];
    imageView.tag = 11;
     imageView.userInteractionEnabled = YES;
    [self.view addSubview:imageView];
    //旋转手势
    UIRotationGestureRecognizer *rgr = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotating:)];
//    [imageView  addGestu]
    [imageView addGestureRecognizer:rgr];
 
    
}
- (void)rotating:(UIRotationGestureRecognizer *)rgr {
    
    UIImageView * imageView = (id)[self.view viewWithTag:11];
    /*
     imageView.transform = CGAffineTransformRotate(imageView.transform, rgr.rotation);
     
     rgr.rotation = 0;*/
    
    
    static CGAffineTransform trans;
    if (rgr.state == UIGestureRecognizerStateBegan) {
        //手势开始时,记录形变状态
        trans = imageView.transform;
    }
    //获取与初始状态的形变差
    CGFloat del = rgr.rotation;
    //根据初始状态与形变差获得当前状态
    //第一个参数为形变基础
    //第二个参数为形变量
    imageView.transform = CGAffineTransformRotate(trans, del);
    
}
@end

拖动手势

#import "PanViewController.h"

@interface PanViewController ()

@end

@implementation PanViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //拖动手势
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 80, 120, 60)];
    label.text =@"xiaoqiang";
    label.tag = 11;
    label.userInteractionEnabled = YES;
    [self.view addSubview:label];
    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panned:)];
    [label addGestureRecognizer:pan];
    
}

- (void)panned:(UIPanGestureRecognizer *)pan{
    //1.在手势开始时,记录初始状态
    //2.根据手势,获取发生变化的差值
    //3.根据差值得到当前状态
    UILabel *label = (id)[self.view viewWithTag:11];
    
    static CGPoint srcOrigin;
    if (pan.state == UIGestureRecognizerStateBegan) {
        srcOrigin = label.frame.origin;
    }
    
    CGPoint delPoint = [pan translationInView:self.view];
    
    //当前位置 = 初始位置 + 差值
    label.frame = CGRectMake(srcOrigin.x +delPoint.x, srcOrigin.y + delPoint.y, label.frame.size.width, label.frame.size.height) ;
    
    
}
@end
GestureRecognizer---UI手势.png
上一篇下一篇

猜你喜欢

热点阅读