问题
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