UIGestureRecognizers用于滚动视图中的视图

时间:2011-09-06 12:35:45

标签: iphone uiscrollview uigesturerecognizer

我正在使用一些UIGestureRecognizer来平移,旋转和缩放视图,该视图位于滚动视图中。

我的问题是,有时滚动视图会在手势识别器之前触摸触摸,所以当发生这种情况时,我最终会缩放滚动视图而不是拖动视图。 (它不会一直发生。我仍然无法描述如何重现这种行为。)

我很确定这可以通过某种方式解决。例如MPMoviePlayerController没有这个问题:实际上,你可以将它放在滚动视图中,当你捏它时,它可以正常工作(即它也不会缩放外部滚动视图)。有谁知道MPMoviePlayerController如何实现这个目标?

我已经搜索过SO的答案,没有结果。谢谢!

4 个答案:

答案 0 :(得分:4)

免责声明:这只是一个想法,我没有测试过这个。

UIGestureRecognizerDelegate定义gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:。您可以尝试在手势识别器代理上实现此功能。这不会阻止滚动视图缩放。要防止缩放,您可以尝试在识别器操作方法中临时设置maximumZoomScale minimumZoomScalezoomScale

答案 1 :(得分:0)

猜测您的旋转与缩放相冲突 - 两者都可能需要两次触摸?

在这种情况下尝试创建单触旋转。

或禁用缩放滚动视图并通过捏合手势识别器实现缩放/缩放。

请参阅:

http://www.icodeblog.com/2010/10/14/working-with-uigesturerecognizers/

答案 2 :(得分:0)

你能否在你的UIScrollView上设置scrollEnabled(NO)

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html

  

如果此属性的值为YES,则启用滚动,如果启用,则滚动   为NO,滚动被禁用。默认值为YES。

     

禁用滚动时,滚动视图不接受触摸   事件;它将它们转发给响应者链。

zoomToRect:animated:这样的事情没有说明被这面旗帜禁用的事情;我假设当您平移/缩放/滚动以响应您的手势事件时,它会继续工作。

答案 3 :(得分:0)

我认为您可以通过识别UIScrolView上的点击选项数来区分放大/缩小和滚动功能。我在这里做同样的事情。你可以尝试一下。

   - (void)viewDidLoad {
[super viewDidLoad];

imgview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"2.png"]];
view1=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 400)];
view1.backgroundColor=[UIColor greenColor];
[view1 addSubview:imgview];


objscrollview.contentMode=UIViewContentModeScaleToFill;
objscrollview.contentSize=CGSizeMake(300, 400);
objscrollview.minimumZoomScale=1;
objscrollview.maximumZoomScale=10;
[objscrollview addSubview:view1];

UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap)];
singleFingerTap.numberOfTapsRequired = 1;
[objscrollview addGestureRecognizer:singleFingerTap];
[singleFingerTap release];
}

//Single tap on scrollview call below method
-(void)handleSingleTap
{
    NSLog(@"Singletap identify");
}


//While perform zoom  in/zoom out action on scroll view it's delegate method call
//In this method, we are return view that want to zoom in/Zoom out..


 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView1
{
    NSLog(@"hi++++++++++++++++++");
    return imgview;
}