iOS 手势

- (void)viewDidLoad {


    [super viewDidLoad];
    
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped)];
    
    [self.view addGestureRecognizer:tap];
    
    
    
    _myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    
    _myView.center = self.view.center;
    
    _myView.backgroundColor = [UIColor redColor];
    
    [self.view addSubview:_myView];
    
    
    //UIGestureRecognizer  手势识别器,能够把所在的view上的touch事件识别为相应的手势。
    //这个类不能直接使用,需要使用它的各种子类。
   
    
    

    单击手势

    //创建手势时,需要制定target和方法,那么在手势触发时,就会调用绑定的方法。
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
    
    //触发手势所需要的点击次数。
    tapGesture.numberOfTapsRequired = 1;
    
    //触发手势所需要的触摸点数。
    tapGesture.numberOfTouchesRequired = 1;
    
    //把手势识别器添加到view上,view上的touch时间就会被识别。
    [_myView addGestureRecognizer:tapGesture];
    
  
    

    双击手势

    UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognized:)];
    
    //触发手势所需要的点击次数。
    doubleTapGesture.numberOfTapsRequired = 2;
    
    //触发手势所需要的触摸点数。
    doubleTapGesture.numberOfTouchesRequired = 1;
    
    //把手势识别器添加到view上,view上的touch时间就会被识别。
    [_myView addGestureRecognizer:doubleTapGesture];
    
    //tapGesture手势必须在doubleTapGesture手势识别失败时才能被识别。
    [tapGesture requireGestureRecognizerToFail:doubleTapGesture];
    
   

   长按手势

    
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognized:)];
    
    //触发长按手势的按压时间
    longPress.minimumPressDuration = 0.5;
    
    //手势触发前最大的允许移动距离。
    longPress.allowableMovement = 10;
    
    [_myView addGestureRecognizer:longPress];
    
  
    

    捏合手势

    
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureRecognized:)];
    
    [_myView addGestureRecognizer:pinch];
    
   

    旋转手势

    
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureRecognized:)];
    
    //手势也可以设置代理
    rotation.delegate = self;
    
    [_myView addGestureRecognizer:rotation];
    
   

    滑动手势

    
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];
    
    [_myView addGestureRecognizer:pan];
    

}


//当另外一个手势也可能触发时,调用此方法,返回YES,允许同时触发,返回NO不允许同时触发。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

单击手势方法
- (void)tapGestureRecognized:(UITapGestureRecognizer *)gesture{
    NSLog(@"点击了");
}


双击手势方法

- (void)doubleTapGestureRecognized:(UITapGestureRecognizer *)gesture{
    NSLog(@"双击了");
}


长按手势方法

- (void)longPressGestureRecognized:(UILongPressGestureRecognizer *)gesture{
    //gesture.state手势的状态。
    if (gesture.state == UIGestureRecognizerStateBegan) {
        NSLog(@"长按了");
        
        //菜单控制器,单例类
        UIMenuController *mc = [UIMenuController sharedMenuController];
        
        UIMenuItem *redItem = [[UIMenuItem alloc] initWithTitle:@"红色" action:@selector(redItemClick)];
        UIMenuItem *greenItem = [[UIMenuItem alloc] initWithTitle:@"绿色" action:@selector(greenItemClick)];
        UIMenuItem *blueItem = [[UIMenuItem alloc] initWithTitle:@"蓝色" action:@selector(blueItemClick)];
        
        mc.menuItems = @[redItem,greenItem,blueItem];
        
        //UIMenuController所在的view必须能够成为第一响应者,而普通的UIView不能成为第一响应者,所以UIMenuController必须显示在自定义view上。
        [self.view becomeFirstResponder];
        
        //设置菜单控制器显示的位置和父视图。
        [mc setTargetRect:_myView.frame inView:self.view];
        
        //让菜单控制器显示
        [mc setMenuVisible:YES animated:YES];
        
    }
    
}


捏合手势方法

- (void)pinchGestureRecognized:(UIPinchGestureRecognizer *)gesture{
    
    _myView.transform = CGAffineTransformScale(_myView.transform, gesture.scale, gesture.scale);
    
    gesture.scale = 1;
    
}


旋转手势方法

- (void)rotationGestureRecognized:(UIRotationGestureRecognizer *)gesture{
    
    _myView.transform = CGAffineTransformRotate(_myView.transform, gesture.rotation);
    
    gesture.rotation = 0;
}

滑动手势方法
- (void)panGestureRecognized:(UIPanGestureRecognizer *)gesture{
    
    CGPoint point = [gesture translationInView:self.view];
    
    _myView.center = CGPointMake(_myView.center.x+point.x, _myView.center.y+point.y);
    
    [gesture setTranslation:CGPointZero inView:self.view];
    
}


- (void)redItemClick{
    _myView.backgroundColor = [UIColor redColor];
    [self.view resignFirstResponder];
}

- (void)greenItemClick{
    _myView.backgroundColor = [UIColor greenColor];
    [self.view resignFirstResponder];
}

- (void)blueItemClick{
    _myView.backgroundColor = [UIColor blueColor];
    [self.view resignFirstResponder];
}

内容概要:本文深入探讨了多种高级格兰杰因果检验方法,包括非线性格兰杰因果检验、分位数格兰杰因果检验、混频格兰杰因果检验以及频域因果检验。每种方法都有其独特之处,适用于不同类型的时间序列数据。非线性格兰杰因果检验分为非参数方法、双变量和多元检验,能够在不假设数据分布的情况下处理复杂的关系。分位数格兰杰因果检验则关注不同分位数下的因果关系,尤其适合经济数据的研究。混频格兰杰因果检验解决了不同频率数据之间的因果关系分析问题,而频域因果检验则专注于不同频率成分下的因果关系。文中还提供了具体的Python和R代码示例,帮助读者理解和应用这些方法。 适合人群:从事时间序列分析、经济学、金融学等领域研究的专业人士,尤其是对非线性因果关系感兴趣的学者和技术人员。 使用场景及目标:①研究复杂非线性时间序列数据中的因果关系;②分析不同分位数下的经济变量因果关系;③处理不同频率数据的因果关系;④识别特定频率成分下的因果关系。通过这些方法,研究人员可以获得更全面、细致的因果关系洞察。 阅读建议:由于涉及较多数学公式和编程代码,建议读者具备一定的统计学和编程基础,特别是对时间序列分析有一定了解。同时,建议结合具体案例进行实践操作,以便更好地掌握这些方法的实际应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值