UISelectionFeedbackGenerator()在iPhone 7上无法工作

7

我想在我的应用程序中使用一些触觉反馈。我正在使用UISelectionFeedbackGenerator,但它无法正常工作。我正在使用安装有iOS 10的真实iPhone 7进行测试。这两行代码应该可以实现,但是没有任何反应:

let generator = UISelectionFeedbackGenerator()
generator.selectionChanged()

你找到任何解决方案了吗? - shelll
我也遇到了同样的问题。在我的一个视图控制器中,触觉反馈无法正常工作。但在另一个视图控制器中,即使没有准备,它也可以正常工作。我真的无法理解发生了什么。 - ullstrm
5个回答

8

似乎是AVFoundation(或者可能只是AVCaptureSession)在某种程度上影响了触觉反馈!没有AVFoundation,我的触觉反馈可以正常工作。一旦我添加它,它就停止工作了。


5
以下是一些适用于旧设备的替代方案:
import AudioToolbox

AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom)
AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom)
AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms)

1

若你正为 AVFoundation 而烦恼,从 iOS13 开始有一种方法可供使用。

func setAllowHapticsAndSystemSoundsDuringRecording(_ inValue: Bool) throws

你可以在录制音频输入时启用系统声音和触觉反馈。

参考资料


1
在调用 selectionChanged() 之前,您需要调用 generator.prepare()。这会唤醒触觉引擎。它会保持活动状态几秒钟,因此如果您将来要调用 selectionChanged(),请确保再次调用 prepare()
let generator = UISelectionFeedbackGenerator()
generator.prepare()
generator.selectionChanged()

我确定我也尝试过prepare()。我会再试一次并报告结果。谢谢! - Kevin Lieser
我无法让它工作。由于我正在构建一个针对iOS 9的应用程序,因此我将这些行包装在if #available(iOS 10.0, *) { ... }中。但是即使是在iOS 10上,没有条件,它也无法在我的iPhone 7上工作。这也正是我在发布到stackoverflow之前尝试的。 - Kevin Lieser
奇怪。您的手机级别是否有一个禁用触感的无障碍设置?您尝试过使用日期选择器或在苹果自带应用中移动表视图单元格以确保您能感受到它们的触感吗? - Canucklesandwich
1
这很奇怪。在我的应用程序中捕获图像后,它可以正常工作(捕获图像和触觉按钮之间没有任何关系-触觉没有绑定在捕获按钮上)。但是,当我重新构建应用程序时,触觉反馈不起作用,直到我再次捕获图像。在使用AVCaptureSession时,是否存在触觉反馈的限制? - Kevin Lieser
2
@KevinLieser 我在触觉反馈和AVFoundation方面遇到了问题! - ullstrm

0

对于使用 AVFoundation 但无法与触觉一起工作的人,我发现了一个简单的方法,可以使触觉与 AVFoundation 同时工作:

func yourAVRecording() {
    // Haptic
    let generator = UISelectionFeedbackGenerator()
    generator.prepare()
    generator.selectionChanged()

    // Record after played Haptic (just give few time to let haptic done and then magic happen)
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
        // Do your AVFoundation stuffs whatever here
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接