如何确定Pan Gesture的方向(向上或向下)?

时间:2013-01-17 23:15:31

标签: uipangesturerecognizer screen-brightness

我的目标是通过向上或向下平移手势来设置iPhone的亮度。如果有一种简单的方法来确定平移方向,我无法弄明白。我添加了一个滑动手势识别器,然后是以下代码:

- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer           shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer     *)otherGestureRecognizer
{
    return YES;
}

但我的pan:方法似乎永远无法确定平底锅的方向。我将“self”设置为两个手势识别器的代表。接下来的代码是我最近的许多尝试。 (平移时效果很好 - 屏幕缓慢或快速变暗,具体取决于向下平移的速度。)

- (IBAction)downSwipe:(UISwipeGestureRecognizer *)recognizer // 1/16/13
{
    NSLog (@"downSwipe");
    if ((recognizer.state == UIGestureRecognizerStateChanged) ||
    (recognizer.state == UIGestureRecognizerStateEnded))
  {
    NSLog (@"downSwipe in downSwipe");
    self.brightness = self.brightness -.1;
    NSLog (@"Going Down");
  }
}

- (IBAction)upSwipe:(UISwipeGestureRecognizer *)recognizer  // 1/16/13
{
    NSLog (@"upSwipe");
    if ((recognizer.state == UIGestureRecognizerStateChanged) ||
    (recognizer.state == UIGestureRecognizerStateEnded))
  {
        NSLog (@"upSwipe in upSwipe");
        self.brightness = self.brightness +.1;
        NSLog (@"Going UP");
  }
}

- (void)pan:(UIPanGestureRecognizer *)recognizer // 1/12/13
{

if ((recognizer.state == UIGestureRecognizerStateChanged) ||
    (recognizer.state == UIGestureRecognizerStateEnded))
   {
    if (UISwipeGestureRecognizerDirectionDown)
    {
        NSLog (@"downSwipe in pan");
        self.brightness = self.brightness -.005;
        NSLog (@"Going DOWN in pan");
    }
     else if (UISwipeGestureRecognizerDirectionUp)
    {
        NSLog (@"upSwipe in pan");
        self.brightness = self.brightness +.005;
        NSLog (@"Going UP in pan");
    }
   } 
}      

下面的输出代表一个大约半英寸的连续向上平移。 (潘:错误地认为这是一个向下的平底锅。)

2013-01-17 17:49:57.774 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.783 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.794 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.801 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.811 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.818 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.832 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.839 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.848 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.855 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.864 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.871 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.881 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.887 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.896 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.903 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.910 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.919 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.929 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.935 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.945 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.951 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.960 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:57.966 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:57.998 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:58.004 SeriousPanicButton[9426:707] Going DOWN in pan
2013-01-17 17:49:58.022 SeriousPanicButton[9426:707] downSwipe in pan
2013-01-17 17:49:58.030 SeriousPanicButton[9426:707] Going DOWN in pan

Obviously this if statement is not working:

if (UISwipeGestureRecognizerDirectionDown)

我希望我不会比现实更努力。以某种方式能够确定平移手势的方向(向上或向下)会更加清晰,而不必担心滑动手势。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:19)

坚持不懈得到回报。我自己找到了答案。 这是确定是否向上或向下平移的代码。如果你想知道方向是左还是右,只需将if语句更改为测试velocity.x。

- (void)pan:(UIPanGestureRecognizer *)recognizer // 1/18/13
{
if ((recognizer.state == UIGestureRecognizerStateChanged) ||
    (recognizer.state == UIGestureRecognizerStateEnded))
{
    CGPoint velocity = [recognizer velocityInView:self.view];

    if (velocity.y >0)   // panning down
    {
        self.brightness = self.brightness -.02;
   //     NSLog (@"Decreasing brigntness in pan");
    }
    else                // panning up
    {
    self.brightness = self.brightness +.02;
  //  NSLog (@"Increasing brigntness in pan");
    }
}
}