2

私はUILongPressGestureRecognizerを使用して、私のコードであるUIView内のタッチを追跡しています

-(void)tapGes:(UILongPressGestureRecognizer *)tapGesture
{
CGPoint location=[tapGesture locationInView:self.view];
UIView *view=tapGesture.view;
switch (tapGesture.state)
{
    case UIGestureRecognizerStateBegan:
        NSLog(@"enter");
        break;
    case UIGestureRecognizerStateEnded:
        NSLog(@"ended");
        break;
    case UIGestureRecognizerStateChanged:
        if (location.x>view.frame.size.width ||
            location.y>view.frame.size.height)
        {
            NSLog(@"out");
            return;
        }
        NSLog(@"change");
        break;
    default:
        break;
}
}

状態 UIGestureRecognizerStateChanged のタッチが UIView から出たときに何をしたいので、状態 UIGestureRecognizerStateEnded に到達しないように、これを達成する方法はありますか?

4

1 に答える 1

2

いつでも階層に追加のビューを追加し、そのビューにジェスチャを追加できます。これにより、ジェスチャの場所を追跡し、サブビューのフレームと照合することができます。つまり、現在のビューが 100x100 ポイントの場合、120x120 ポイントの透明な親ビューを作成できます。ジェスチャを 120 ポイント ビューに追加し、ジェスチャの位置をビューの最初のサブビューのフレームと比較します。

-(void)tapGes:(UILongPressGestureRecognizer *)tapGesture
{
    CGPoint location=[tapGesture locationInView:tapGesture.view];
    UIView *view = tapGesture.view;

    switch (tapGesture.state)
    {
        case UIGestureRecognizerStateBegan:
            NSLog(@"enter");
            break;
        case UIGestureRecognizerStateEnded:
            NSLog(@"ended");
            break;
        case UIGestureRecognizerStateChanged:
            if (CGRectContainsPoint([view.subviews[0] frame], location)) {
                // location is within view
            }else{
                // location has exited view
            }
            NSLog(@"change");
            break;
        default:
            break;
    }
}
于 2013-09-01T14:55:09.567 に答える