我正在使用一些UIGestureRecognizer
来平移,旋转和缩放视图,该视图位于滚动视图中。
我的问题是,有时滚动视图会在手势识别器之前触摸触摸,所以当发生这种情况时,我最终会缩放滚动视图而不是拖动视图。 (它不会一直发生。我仍然无法描述如何重现这种行为。)
我很确定这可以通过某种方式解决。例如MPMoviePlayerController
没有这个问题:实际上,你可以将它放在滚动视图中,当你捏它时,它可以正常工作(即它也不会缩放外部滚动视图)。有谁知道MPMoviePlayerController
如何实现这个目标?
我已经搜索过SO的答案,没有结果。谢谢!
答案 0 :(得分:4)
免责声明:这只是一个想法,我没有测试过这个。
UIGestureRecognizerDelegate
定义gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
。您可以尝试在手势识别器代理上实现此功能。这不会阻止滚动视图缩放。要防止缩放,您可以尝试在识别器操作方法中临时设置maximumZoomScale
minimumZoomScale
到zoomScale
。
答案 1 :(得分:0)
猜测您的旋转与缩放相冲突 - 两者都可能需要两次触摸?
在这种情况下尝试创建单触旋转。
或禁用缩放滚动视图并通过捏合手势识别器实现缩放/缩放。
请参阅:
http://www.icodeblog.com/2010/10/14/working-with-uigesturerecognizers/
答案 2 :(得分:0)
你能否在你的UIScrollView上设置scrollEnabled(NO)
?
如果此属性的值为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;
}