嵌入式 ViewContainer 中的手势识别器未命中
Posted
技术标签:
【中文标题】嵌入式 ViewContainer 中的手势识别器未命中【英文标题】:Gesture recognizer in embedded ViewContainer does not get hit 【发布时间】:2014-08-20 19:00:15 【问题描述】:在搜索了将近 4 天以找到解决我的问题的方法后,我现在向您请教,希望得到帮助。
我有一个UIViewController
,只有一个UIViewContainer
。这个容器将以编程方式填充从 nib 文件加载的视图。最后一个视图附加了 3 个手势识别器。但是没有一个被击中。
带有 ViewContainer 的主视图
笔尖视图
将 view.nib 加载到容器中的代码
userMasterViewContainer *container = [[[[NSBundle mainBundle] loadNibNamed:@"UserCardView" owner:nil options:nil] lastObject] initWithDelegate:self andUser:user];
[self.viewContainer addSubview:container];
笔尖视图类中的手势识别器代码
- (void)addGestureRecognizerToPicture:(UIView *)picture
// profile picture gestures
UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotatePicture:)];
[picture addGestureRecognizer:rotationGesture];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scalePicture:)];
[pinchGesture setDelegate:self];
[picture addGestureRecognizer:pinchGesture];
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panPicture:)];
[panGesture setMaximumNumberOfTouches:2];
[panGesture setDelegate:self];
[picture addGestureRecognizer:panGesture];
self.userInteractionEnabled = YES;
- (void)rotatePicture:(id)rotateProfilePicture
- (void)scalePicture:(id)scaleProfilePicture
- (void)panPicture:(UIPanGestureRecognizer *)gestureRecognizer
手势将在 viewDidLoad 中添加到两个 UIImageView
:Cover Overlay 和 User Photo
[self addGestureRecognizerToPicture:self.backgroundPicture];
它们都没有工作。我希望有人能帮助我。
最好的问候安德烈
【问题讨论】:
【参考方案1】:又试了几天,问题就解决了。 父视图的奇怪组合捕获了我的用户交互。
我通过将每个不应识别触摸的视图的 userInteractionEnabled
属性设置为 NO
来解决此问题。
// setup inactive and active elements for user interactions
self.userInteractionEnabled = YES;
self.userPicture.userInteractionEnabled = YES;
self.buttonOverlay.userInteractionEnabled = NO;
self.backgroundPictureOverlay.userInteractionEnabled = NO;
self.userPictureOverlay.userInteractionEnabled = NO;
因为还有一个 UIButton Button - Profile
覆盖我的视图。还需要以下代码来防止他捕捉到手势。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
return touch.view == self.buttonOverlay ? NO : YES;
此外,我必须添加以下方法,因为我想在一个简单的图像编辑器中使用这些手势。使用此代码,我可以同时旋转、缩放和平移。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
return YES;
【讨论】:
以上是关于嵌入式 ViewContainer 中的手势识别器未命中的主要内容,如果未能解决你的问题,请参考以下文章
识别 UIView 中的滑动手势以使用手势识别器滚动滚动视图
带有手势识别器的 UITextView - 有条件地向前触摸到父视图