将捏合手势从自定义 UIView 传递到父 UIScrollView
Posted
技术标签:
【中文标题】将捏合手势从自定义 UIView 传递到父 UIScrollView【英文标题】:Pass pinch gesture from custom UIView to parent UIScrollView 【发布时间】:2013-09-14 06:39:53 【问题描述】:我有一个自定义UIView
作为UIScrollView
中的子视图。
selected
时,用户可以通过在屏幕上任意位置捏捏来调整子视图的大小(子视图很小)。
当deselected
时,我希望将这个捏合手势传递给 UIScrollView,以便它可以像往常一样处理它。
这是我正在尝试的。
- (IBAction)pinchInView:(UIPinchGestureRecognizer *)sender
if (self.item.isSelected)
if ((sender.state == UIGestureRecognizerStateChanged) || (sender.state == UIGestureRecognizerStateEnded))
[self.item resizeWithScaleFactor:sender.scale];
else
[self.scrollView setZoomScale:self.scrollView.zoomScale *= sender.scale];
sender.scale = 1;
虽然它确实有效,但这似乎是一种尴尬的方式。
有没有办法让 UIScrollView 自己处理缩放?
我几乎也使用与平移手势相同的方法。
如果有任何方法可以减少这种尴尬,我非常感谢您的帮助。
【问题讨论】:
【参考方案1】:为您添加到子视图的手势提供一个代表。在委托中实现以下方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecoznizer shouldReceiveTouch:(UITouch *)touch
if(isSelected == true)
return YES;
else
return NO;
【讨论】:
为了更安全,我还将UIPinchGestureRecognizer
保存在该类的实例变量中,并确保进入gestureRecognizer:shouldReceiveTouch:
的UIGestureRecognizer
是我们的手势识别器。但总的来说,我支持这个答案。【参考方案2】:
实现下面的委托方法
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
【讨论】:
以上是关于将捏合手势从自定义 UIView 传递到父 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章
在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏
如果*** UIView 没有收到它想要处理的手势,则将手势/触摸传递给另一个 UIView?