ios UISwipeGestureRecognizer计算偏移量

时间:2011-12-01 13:30:13

标签: iphone objective-c ios uigesturerecognizer uiswipegesturerecognizer

我正在向我的应用添加滑动手势识别器

- (void)createGestureRecognizers
{

    //adding swipe up gesture
    UISwipeGestureRecognizer *swipeUpGesture= [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeUpGesture:)];
    [swipeUpGesture setDirection:UISwipeGestureRecognizerDirectionUp];
    [self.view addGestureRecognizer:swipeUpGesture];
    [swipeUpGesture release];
}

处理滑动事件的方法:

-(IBAction)handleSwipeUpGesture:(UISwipeGestureRecognizer *)sender
{
    NSLog(@"handleSwipeUpGesture: called");
}

我如何在这里计算偏移量?移动视图?

2 个答案:

答案 0 :(得分:8)

UISwipeGestureRecognizer用于检测离散滑动手势 - 它只会在滑动完成后触发您的动作一次 - 因此,如果您询问手指移动的偏移或距离,您可能想要查看创建子类的子类UIGestureRecognizer或使用UIPanGestureRecognizer获取连续的手势信息。不确定你究竟想做什么,但是UIScrollView也可以按顺序排列......

查看apple docs for gesture recognizers

答案 1 :(得分:8)

UISwipeGestureRecognizer的UIGestureRecognizer抽象超类具有以下方法

- (CGPoint)locationInView:(UIView *)view
- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)view

允许您知道手势在视图中的位置,但这是一个离散的手势识别器(无论您想要调用它,都会以给定的“平移”或“偏移”触发,您无法控制) 。听起来你正在寻找连续控制,为此你想要一个UIPanGestureRecognizer,它有以下方法(为你做翻译计算)

- (CGPoint)translationInView:(UIView *)view
- (void)setTranslation:(CGPoint)translation inView:(UIView *)view
- (CGPoint)velocityInView:(UIView *)view

当手势不断展开时,您将获得快速回调。