事件处理

UIEvent:事件,是由硬件捕捉的一个表示用户操作设备的对象

触摸事件

触摸事件:用户通过触摸设备屏幕操作对象、输入数据。支持多点 触摸,包含1个到多个触摸点

触摸开始执行的方法

//touches:手指个数  envet:事件
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //大小随机
    CGFloat x = arc4random() % 276;
    CGFloat y = arc4random() % 568;
    CGFloat width = arc4random() % (375 -10) - x + 10;
    CGFloat height = arc4random() % (667 - 10) - y + 10;
    self.frame = CGRectMake(x, y, width, height);
    //颜色随机
    CGFloat f = arc4random()%256/255.0;
    self.backgroundColor = [UIColor colorWithRed:f green:f blue:f alpha:1.0];
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

触摸移动过程中执行的方法

//实现色块随着鼠标拖动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    //从事件中获取当前实践中的所有手指
    NSSet *alltouches = [event touchesForView:self];
    //    NSLog(@"%@",alltouches);
    
    //此时,alltouches与参数中detouches其实内容是一样的.
    UITouch *touch = [alltouches anyObject];
//    NSLog(@"%@",touch);
    
    //获取当前这个点在视图中坐标位置
    CGPoint p = [touch locationInView:self];
    
    //获取拖动之前的坐标位置
    CGPoint p1 = [touch previousLocationInView:self];
    
    //通过改变Center来改变视图的显示位置
//    CGPoint newCenter;
//    newCenter.x = self.center.x + (p.x - p1.x);
//    newCenter.y = self.center.y + (p.y - p1.y);
//    self.center = newCenter;
    
    //通过frame来改变视图的显示位置
    CGRect newFrame = self.frame;
    newFrame.origin.x = self.frame.origin.x + (p.x - p1.x);
    newFrame.origin.y = self.frame.origin.y + (p.y - p1.y);
    self.frame = newFrame;
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

结束触摸执行的方法

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}

阻断触摸时触发的方法

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"%s,%d",__FUNCTION__,__LINE__);
}    

总结

我写了一个视图控制器,控制的视图中有三个子视图
1视图:点击颜色变化 2视图:拖拽 3视图:变化大小


    CGPoint p = [touch locationInView:self];
    CGPoint p1 = [touch locationInView:self.test1];
    CGPoint p3 = [touch locationInView:self.test3];
    NSLog(@"@00@@%lf,%lf",p.x,p.y);
    NSLog(@"11$$%lf,%lf",p1.x,p1.y);
    NSLog(@"33$$%lf,%lf",p3.x,p3.y);

得到的结论是 点击到色块的时候输出为0,可以通过这个加Center实现每个色块单独起来

晃动事件

暂无介绍

远程控制事件

暂无介绍

响应者链

UIResponder 响应者类
hit-test 点击检测

UIGestureRecognizer 手指触控的衍生类

在 iPhone 或 iPad 的开发中,除了用 touchesBegan / touchesMoved / touchesEnded 这组方法来控制使用者的手指触控外,也可以用 UIGestureRecognizer 的衍生类別来进行判断。用 UIGestureRecognizer 的好处在于有现成的手势,开发者不用自己计算手指移动轨迹。UIGestureRecognizer的衍生类別有以下几种:
UITapGestureRecognizer //Tap(点一下)
UIPinchGestureRecognizer //Pinch(二指往內或往外拨动)
UIRotationGestureRecognizer //Rotation(旋转)
UISwipeGestureRecognizer //Swipe(滑动,快速移动)
UIPanGestureRecognizer //Pan (拖移,慢速移动
UILongPressGestureRecognizer //LongPress(长按)
从命名上不难了解這些类別所对应代表的手势,分別是 Tap(点一下)、Pinch(二指往內或往外拨动)、Rotation(旋转)、Swipe(滑动,快速移动)、Pan (拖移,慢速移动)以及 LongPress(长按)。這些手势別在使用上也很简单,只要在使用前定义并添加到对应的视图上即可。

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)];
    tap.numberOfTapsRequired = 1;  //点击数 单击  双击 
    tap.numberOfTouchesRequired = 1; //手指数 多手触摸
    [_loginView addGestureRecognizer:tap];
    [tap release];

小知识

UIImageView UILabel userInteractionEnabled默认交互是关闭的 其他是默认开启的

 posted on 2015-04-23 22:48  ianhao_cn  阅读(169)  评论(0编辑  收藏  举报