• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在我点击我的 MPVolumeSlider 后,UIView 上的 UITapGestureRecognizer 被触发

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:18:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在 stackoverflow 上找到了一些关于该问题的问题和答案,但那里的解决方案都没有解决我的问题。

我的 iOS 应用程序可以通过一个不错的音乐播放器播放一些音乐。我用 Xcode 的 Interface Builder 设计了它,并拖出了一个 UIView 并将其类更改为 MPVolumeView。当我在 iPhone 6 上调试我的应用程序时,一切正常。

这是我的问题:我还在整个 View 上拖出了一个 UITapGestureRecognizer,其中包含我的控件,例如

play/pause, next/previous track (...)

还有我的 MPVolumeView。当我点击该 View 时,它应该淡出并消失。然后我在我的 UIImageView 上添加了一个 UITapGestureRecognizer ,它显示了我的歌曲艺术图像。当我点击这个 ImageView 时,它应该在我的 View 中淡出,所有控件都在 int 中 - 这工作正常。

但是:当我稍微滑动音量 slider 的旋钮时,或者如果我只是触摸它, View 仍然会消失。似乎我的 MPVolumeView 正在转发我的触摸或类似的东西。我尝试在音量 slider 上设置 userInteractionEnabled = false,但这没有帮助。我还将手势识别器的代表设置为 self 并添加了

- (BOOL)gestureRecognizerUIGestureRecognizer *)gestureRecognizer shouldReceiveTouchUITouch *)touch {
    NSLog(@"tapped");
    if([gestureRecognizer.view isMemberOfClass:[UIImageView class]]) {
        return true;
    }
    return false;
}

函数到我的代码,它返回 truefalse,具体取决于我正在点击的 View 。当我访问 gestureRecognizer.view 属性时,它无法识别我的 MPVolumeView,只能识别后台的 UIView。

这是我在 TapGestureRecognizers 被触发后触发的两个方法:

- (IBAction)overlayViewTappedUITapGestureRecognizer *)sender {
    if(sender.state == UIGestureRecognizerStateEnded) {
        [UIView animateWithDuration:0.3
                          delay:0.0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{ self.blackOverlayView.alpha = 0.0; self.normalTimeLabel.alpha = 1.0; }
                     completion:nil];
    }
}
- (IBAction)imageViewTappedUITapGestureRecognizer *)sender {
    [UIView animateWithDuration:0.3
                      delay:0.0
                    options:UIViewAnimationOptionAllowUserInteraction
                 animations:^{ self.blackOverlayView.alpha = 1.0; self.normalTimeLabel.alpha = 0.0; }
                 completion:nil];
}

请帮帮我,我快要疯了..

编辑:我的音乐播放器如下所示:

enter image description here

点击 View 上的anywhere( subview 除外)后, View 应该淡出并隐藏所有内容,只显示歌曲的原图图像和当前耗时。这将如下所示:

enter image description here

正如我所说 - 问题是,如果我只是点击音量 slider 或将其滑动一点点,我的 UITapGestureRecognizer 会触发并淡出我的完整 View 。我怎样才能防止这种情况发生?



Best Answer-推荐答案


它的行为方式仅仅是因为您将手势识别器添加到了整个 UIView,其中包括音量 slider 等。

不是在整个 View 中检测触摸,而是检查触摸是否在您想要的区域中。

创建一个CGRect属性,我称之为touchArea:

@property CGRect touchArea;

然后指定touchArea的大小(你可以在viewDidLoad中做到这一点):

touchArea  = CGRectMake(0.0, 240.0, 320.0, 240.0);

您必须找出您想要的位置以及它应该有多大,并将我的示例值替换为真实值。一种简单的作弊方法是在 IB 中获取类似 UILabel 的内容并根据您的需要定位和调整大小,然后转到大小检查器 Pane 并获取 x、y、宽度和高度值。

然后,在你做淡入淡出动画之前,检查触摸是否在 touchArea:

- (void)handleGestureUIGestureRecognizer *)gestureRecognizer 
{
    CGPoint touchPoint = [gestureRecognizer locationInView:self.view];
    if (CGRectContainsPoint(touchArea, touchPoint)) 
    {
        //do your animation here.
    } 
}

作为说明,我会设置一个 BOOL 来检查 View 是淡入还是淡出,因此您可以在制作动画之前随时检查。

关于ios - 在我点击我的 MPVolumeSlider 后,UIView 上的 UITapGestureRecognizer 被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463919/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap