小编cod*_*ken的帖子

如何防止 iOS Safari 做出不需要的选择?

当我在 iOS Safari 中长按 React 应用程序上的工具栏按钮时,它会选择图标。我用工具栏上的 CSS 禁用了它:

-webkit-touch-callout: none;
-webkit-user-select: none;
user-select: none;
Run Code Online (Sandbox Code Playgroud)

但随后 Safari 会继续选择它能找到的下一个愚蠢元素。

因此,我最终将样式应用到应用程序的根目录,但现在用户当然无法选择段落等内容中的任何文本。

我真正想要的是一种设置屏障的方法,上面写着“Safari,你能停止尝试选择你可能找到的下一个东西吗?”

因此,在我的工具栏组件上,我执行了此操作并验证了它被调用:

  onTouchStart={e => {
    e.stopPropagation();
    e.preventDefault();
    e.bubbles = false;
  }}
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个:

  onTouchStartCapture={e => {
    e.stopPropagation();
    e.preventDefault();
    e.bubbles = false;
  }}
Run Code Online (Sandbox Code Playgroud)

onSelect与,相同onSelectCapture

然而,Safari 会忽略所有这些,并继续选择层次结构中的内容,一直到根 DIV,直到找到无意义的内容可供选择。当我通过复制查看它选择的内容时,它只是一个空格。

我缺少什么?我是否真的必须应用user-select: none;到根目录,然后选择性地允许在有意义的地方进行选择,例如包含文本的 DIV?那么,长按工具栏时,Safari 怎么会找不到并选择它呢?

javascript dom mobile-safari reactjs react-dom

6
推荐指数
1
解决办法
1870
查看次数

如何将声音播放到 USB 音频接口上的特定输出通道?

我有一个 motu UltraLite mk4 USB 音频接口连接到运行 MacOS 10.13.3 的 Mac。

我正在尝试播放三个立体声文件,每个文件都有自己的立体声扬声器。

为了降低复杂性,我只是试图让一个 AVAudioPlayerNode 的立体声从默认输出通道 0 和 1 以外的东西中出来。

USB音频接口正面

USB 音频接口背面

我希望通过 AVAudioEngine + 一些低级别的 Core Audio 来实现这一点。

到目前为止,通过配置 AVAudioEngine 的输出节点,我已经成功地将音频播放到我的 USB 音频接口:

AudioUnit audioUnit = [[self.avAudioEngine outputNode] audioUnit];
OSStatus error = AudioUnitSetProperty(audioUnit,
    kAudioOutputUnitProperty_CurrentDevice,
    kAudioUnitScope_Global,
    0,
    &deviceID,
    sizeof(deviceID));
if (error) {
    NSLog(@"Failed to set desired output audio device: %d", (int)
}
Run Code Online (Sandbox Code Playgroud)

我还成功地设置了一个通道映射,它允许一个播放器将立体声文件播放到我的 USB 音频接口的 4+5 通道,如 Apple 开发论坛中的 theanalogkid 所述

通道映射的问题在于它全局应用于 AVAudioEngine 的输出,并且会影响所有 AVAudioPlayerNode。所以这不是解决方案。

因此,我没有在 AVAudioEngine 的 outputNode …

audio core-audio avfoundation avaudioengine avaudioplayernode

4
推荐指数
1
解决办法
848
查看次数