【问题标题】:Detecting touches in MPVolumeView在 MPVolumeView 中检测触摸
【发布时间】:2011-02-06 00:18:14
【问题描述】:

我正在使用 AVPlayer 复制 MPMediaPlayerView,因此我可以为其添加一些功能。我已经创建了一个带有播放/暂停的 UIView,我通过触摸显示它,然后根据 HeadsUpUI 示例代码设置一个计时器来隐藏它。我添加了一个 MPVolumeView 来调节音量。

这很好用,除了如果您滑动音量,我的父视图不知道您仍在与子视图交互并在计时器触发时隐藏自身。所以你仍在调整音量,但滑块不再存在。

我最想知道的是视图和所有子视图上的触摸何时结束。有没有办法做到这一点?

我能想到的唯一解决方案是遍历 MPVolumeView 的子视图,当我找到滑块时,观察跟踪属性以了解何时完成跟踪。但这并不能处理长时间按住按钮的人。我真的很想找到一个通用的解决方案。

TIA

【问题讨论】:

    标签: objective-c cocoa-touch uiview uitouch avplayer


    【解决方案1】:

    向 MPVolumeView 添加手势识别器。让手势识别器在您的视图中调用重置计时器的方法。

    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(0, 88, 320, 30)];
    UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(volumeAdjusted:)];
    recognizer.cancelsTouchesInView = NO;     // this line is VERY important
    [volumeView addGestureRecognizer:recognizer];
    [self.view addSubview:volumeView];
    [volumeView release];
    
    -(void)volumeAdjusted:(UIGestureRecognizer *)recognizer {
         // reset timer
    }
    

    【讨论】:

    • 对于 pre 3.2 怎么样?扩展 MPVolumeView 和实现 touch* 事件似乎不起作用。有什么想法吗?
    • 这很好用。谢谢。不要忘记cancelsTouchesInView
    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多