如何检测手指移入或移出我定制的UIView

时间:2013-12-17 08:18:42

标签: ios iphone objective-c uiview uigesturerecognizer

我有一个定制的UIView

@interface EColumn : UIView

在这个超级视图中我有很多这个EColumn的实例。

如何检测手指何时握住并移动到UIView区域以及何时移出。

我不是指轻拍手势,我可以通过使用它来检测轻拍手势:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(taped:)];
        [self addGestureRecognizer:tapGesture];

2 个答案:

答案 0 :(得分:4)

@implementation EColumn

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *view = [self touchedViewWithTouches:touches andEvent:event];
    NSLog(@"%@",view);
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *view = [self touchedViewWithTouches:touches andEvent:event];
    NSLog(@"%@",view);
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIView *view = [self touchedViewWithTouches:touches andEvent:event];
    NSLog(@"%@",view);
}

- (UIView *)touchedViewWithTouches:(NSSet *)touches andEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:touch.view];

    UIView *touchedView;

    for (UIView *view in self.subviews)
    {
        if(CGRectContainsPoint(view.frame, touchLocation))
        {
            touchedView = view;
            break;
        }
    }

    return touchedView;
}

@end

答案 1 :(得分:0)

您可以使用 UILongPressGestureRecognizer 检测手指按住特定时间。为此,您还可以指定 minimumPressDuration numberOfTouchesRequired

UILongPressGestureRecognizer *longPressRecognizer = 
         [[UILongPressGestureRecognizer alloc]
         initWithTarget:self 
         action:@selector(longPressDetected:)];
    longPressRecognizer.minimumPressDuration = 3;
    longPressRecognizer.numberOfTouchesRequired = 1;
    [self addGestureRecognizer:longPressRecognizer];

要检测移动,您可以使用 UIPanGestureRecognizer

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];
    [self addGestureRecognizer:panRecognizer];