use*_*859 0 iphone xcode swipe uigesturerecognizer
我在UIScrollView中有一个UIView,都是使用IB创建的.UIView在UIScrollView内水平滚动.我想检测左右两根手指滑动.
借用我在SmpleGestureRecognizers中找到的示例代码 ,我将以下代码放在UIScrollView的ViewController的viewDidLoad方法中...
UIGestureRecognizer *recognizer;
UISwipeGestureRecognizer *swipeRightRecognizer, *swipeLeftRecognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
swipeRightRecognizer = (UISwipeGestureRecognizer *)recognizer;
swipeRightRecognizer.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:swipeRightRecognizer];
[recognizer release];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
swipeLeftRecognizer = (UISwipeGestureRecognizer *)recognizer;
swipeLeftRecognizer.numberOfTouchesRequired = 2;
swipeLeftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeftRecognizer];
[recognizer release];
Run Code Online (Sandbox Code Playgroud)
我在viewcontroller.h中设置了.并有以下委托方法......
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我假设这是一个有效的gestureRecognizer委托方法,但我在文档中找不到任何对它的引用.
我没有任何错误,但是当我用双指滑动时没有任何反应.不调用委托方法,也不是我的操作方法.我尝试删除numbeOfTouchesRequired调用,看看它是否可以单手滑动无效.
我是否将gestureRecognizers添加到右侧视图中?我尝试将它添加到UIView,UIScrollView以及self.view.superView.
示例代码运行良好.我在代码实现和示例代码之间可以看到的唯一区别是我使用IB创建视图而示例代码没有.我怀疑在它到达我的识别器之前有些东西正在消耗滑动手势.
我究竟做错了什么.
谢谢,
约翰
我有同样的问题,我通过使用UIPanGestureRecognizer而不是UISwipeGestureRecognizer解决了.
为了模拟滑动的检测,我们将在scrollview中使用手势的速度.如果x方向的速度> = 3000(例如),则将检测到滑动.
如果x> 0,则右键滑动.
我为解决您的情况而实现的代码是:在名为_scroll1的uiscrollview中:
UIPanGestureRecognizer *pan;
pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(Swipe4ScrollViews:)];
[pan setMinimumNumberOfTouches:2];
[_scroll1 addGestureRecognizer:pan];
[pan release];
Run Code Online (Sandbox Code Playgroud)
使用名为_panning的全局BOOL变量,Swipe4ScrollViews将完成艰苦的工作:
-(void)Swipe4ScrollViews:(UIPanGestureRecognizer *)sender
{
if(sender.state == UIGestureRecognizerStateBegan) _panning = NO;
CGPoint v =[sender velocityInView:_scroll1];
NSLog(@"%f, %f",v.x,v.y);
if( (abs(v.x) >= UMBRAL) && !_panning)
{
_panning = YES;
[sender cancelsTouchesInView];
if(v.x>0) NSLog(@"Right");
else NSLog(@"Left");
[self doSomething];
}
}
Run Code Online (Sandbox Code Playgroud)
我将它封装在UIGestureRecognizer子类上:UISwipe4ScrollGestureRecognizer