How do I determine the direction (up or down) of a UIPanGesture?

☆樱花仙子☆ 提交于 2019-12-11 02:12:40

问题


My goal is to set the iPhone's brightness with up or down pan gestures. If there is a simple way to determine the pan's direction, I can't figure it out. I added a swipe gesture recognizer, then the following code:

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

but my pan: method never seems to be able to determine the direction of the pan. I've set "self" as the delegates for both gesture recognizers. The code that follows is my latest of many different attempts. (It works beautifully when panning down - the screen dims slowly or quickly, depending on the speed of the downward pan.)

- (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");
    }
   } 
}      

The output below represents a continuous upward pan of about half an inch. (pan: incorrectly thinks it's a downward 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)

I hope I'm not making this harder than it really is. It would be much cleaner to somehow be able to determine the direction (up or down) of the pan gesture, and not have to even bother with swipe gestures.

Any help will be greatly appreciated.


回答1:


Perseverance pays off. I found the answer myself. Here's the code to determine if panning up or down. Just change the if statement to test velocity.x if you want to know if the direction is left or right.

- (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");
    }
}
}


来源:https://stackoverflow.com/questions/14389894/how-do-i-determine-the-direction-up-or-down-of-a-uipangesture

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!