2012-05-17 60 views
0

我收到一些不寻常的行为UISwipeGestureRecognizer。第一次刷卡被正确检测到,但第二次刷卡没有。然后第三次滑动被正确检测到,但第四次滑动没有。我有两个滑动手势识别器,一个用于左侧,另一个用于右侧。下面是代码:UISwipeGestureRecognizer的不寻常行为

.h文件中

- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)recognizer; 

.m文件

- (IBAction)handleSwipe:(UISwipeGestureRecognizer *)recognizer { 
    if (recognizer.direction == UISwipeGestureRecognizerDirectionLeft) { 
     NSLog(@"you swiped left"); 
     [self spinSunCounterClockwise]; 
    } else { 
     NSLog(@"you swiped right"); 
     [self spinSunClockwise]; 
    } 

} 

因此,举例来说,如果我向左滑动第一次,spinSunCounterClockwise被叫,但如果我再次滑动spinSunClockwise被调用。

另一个例子是,如果我第一次滑动spinSunCounterClockwise被调用。如果我向右滑动,则再次调用spinSunCounterClockwise

请帮忙吗?

编辑1:之一的纺丝方法

-(void) spinSunCounterClockwise 
{ 
    [UIView animateWithDuration:2.0f animations:^{ 
     imgSun.transform = CGAffineTransformRotate(imgSun.transform, 3.142); 
    } completion:^(BOOL finished) { 

    }]; 
} 
+0

'spinSunCounterClockwise'和'spinSunClockwise'做了什么?他们是否旋转了添加了手势识别器的视图? – omz

+0

是的,我会用其中一种方法更新OP,另一种方法的度数为负值。每次奇怪的滑动我也会得到错误的'NSLog'消息。 – garethdn

回答

1

当您通过180°旋转视图(顺便说一句,你应该使用的M_PI代替3.142)的观点是颠倒之后,还等什么以前离开现在是正确的,反之亦然。

所以,当你向左滑动的第一次,第二次左轻扫(从你的角度)实际上是公认向右滑动,同时向右滑动实际上是左轻扫,这也解释了,您对行为观察到的。

在两次手势(360°旋转)后,您的视图再次处于其原始方向,因此对于第三个手势,识别再次为“正常”。

+0

谢谢。我有两个问题:1.如果我想旋转它360degs我使用什么值('2 * M_PI'似乎不工作)。 2.如果我想旋转180度,但是仍希望我的滑动功能正常工作,您会有什么建议。 – garethdn

+0

1.你会在SO上发现很多关于该主题的帖子,只是搜索诸如“360 uiview”之类的东西,大多数答案似乎都涉及到使用CAAnimation。 2.您可以检查视图是否旋转(例如,使用'CGAffineTransformIsIdentity')并在该情况下执行相反的操作。 – omz

+0

是的,我已经找到了那个好点 - 'CAAnimation'并不是我真正想在这里实现的,所以我决定在完成后旋转179.999度,然后再旋转179.999度。再次感谢你的帮助。 – garethdn