嵌入式 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 中添加到两个 UIImageViewCover OverlayUser 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 中的滑动手势以使用手势识别器滚动滚动视图

Swift - 将手势识别器添加到表格单元格中的对象

带有手势识别器的 UITextView - 有条件地向前触摸到父视图

通过委托为另一个类中的手势识别器调用选择器

如何在ios中的特定collectionview单元格上应用手势识别器

如何识别 Apple Watch 应用中的手势?