ios的触摸事件-UITouch

在ios开发的触摸事件中包括:

 1.touchesBegan  触摸开始 在一次触摸事件中 只会执行一次

 2.touchesMoved  触摸移动  在一次触摸事件中会执行多次

 3.touchesEnded  触摸结束  再一次触摸事件中会执行一次

    如果要调整控件 的位置可以使用 locationInView previousLocationInView 计算移动的差值即可。

 4.touchesCancelled 触摸取消(通常在接电话时会触发)

首先介绍一下小案例:移动红色方块的案例:

 

 用到的触摸事件是:touchesMoved   设置红色方块的中心点为鼠标本地移动和与上次移动的点得差值,获得位移的偏移量。

#pragma mark - 在触摸方面开发时,只针对touches进行处理
#pragma mark - 触摸开始 在一次触摸事件中 只会执行一次
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //NSLog(@"开始%@",touches);
}
#pragma mark - 触摸移动  在一次触摸事件中会执行多次
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    //1.从nsset中取出touch对象
    //通常在单点触摸时。可以使用[touches anyObject] 取出UITouch对象
    UITouch *touch = [touches anyObject];
    //2.要知道手指触摸的位置
    CGPoint location = [touch locationInView:self.view];
    //2.1对位置进行修正
    
    CGPoint pLocation = [touch previousLocationInView:self.view];
    CGPoint deltaP = CGPointMake(location.x - pLocation.x, location.y-pLocation.y);
    CGPoint newCenter = CGPointMake(self.redView.center.x + deltaP.x, self.redView.center.y + deltaP.y);
    [self.redView setCenter:newCenter];
    
    NSLog(@"(%f,%f)---(%f,%f)",location.x,location.y,pLocation.x,pLocation.y);
}
//其中视图如果自己不进行设置则为单点触摸,所以可以使用
[touches anyObject] 获得uitouch对象,



 

 

这三句话是修正红色方块滚动时第一次移动时突然变化的问题,只要是平行移动的原理 ,距离上一次移动的距离。

previousLocationInView:是获得前一个坐标。

locationInView:获得当前的坐标。
 
CGPoint pLocation = [touch previousLocationInView:self.view];
CGPoint deltaP
= CGPointMake(location.x - pLocation.x, location.y-pLocation.y); CGPoint newCenter = CGPointMake(self.redView.center.x + deltaP.x, self.redView.center.y + deltaP.y);

 

 

  

                                                                    分享知识  快乐学习  

                                                                          ----Seven

posted @ 2015-01-18 16:25  大玲D0  阅读(2723)  评论(0编辑  收藏  举报
Write By Seven