1

直到今天我一直在模拟器中测试我的应用程序。我第一次在真正的 iPhone 上测试了一个项目。每次按下按钮,手机都会振动,这让我感到非常惊讶。这没什么大不了的,只是我的特定应用程序有一个内置键盘,每次按下键 ( ) 时都会播放音频UIButton

在此处输入图像描述

振动声音加上音频声音的组合非常分散注意力。有没有办法以编程方式禁用按钮振动?我不是在问如何禁用手机的所有振动,只是我选择的按钮。我能找到的唯一相关问题正好相反:让 iPhone 振动

我不必让用户在设置中关闭振动,对吗?

更新1:

从评论来看,这可能是设备特定的问题,或者我以某种方式触发了振动。

这就是我播放声音的方式:

import Foundation
import AudioToolbox

class Player {
    
    private let audioFolder = "raw"
    
    func playSoundFromFile(file: String) {
        var soundURL: NSURL?
        var soundID: SystemSoundID = 0
        let filePath = NSBundle.mainBundle().pathForResource("\(audioFolder)/\(file)", ofType: "mp3")
        soundURL = NSURL(fileURLWithPath: filePath!)
        if let url = soundURL {
            AudioServicesCreateSystemSoundID(url, &soundID)
            AudioServicesPlayAlertSound(soundID)
        }
    }
}

这是我的按钮点击动作:

@IBAction func keyTapped(sender: UIButton) {
    
    let buttonText = sender.titleLabel?.text ?? ""
    
    updateDisplayForIpa(buttonText)
    
    // play sound
    if let fileName = singleSound.fileNameForIpa(buttonText) { // converts IPA sound symbol into a filename 
        player.playSoundFromFile(fileName)
    }
    
}

由于点击调用了一个更新显示方法,这里就是:

func updateDisplayForIpa(ipa: String) {
    
    if let fileName = singleSound.fileNameForIpa(ipa) {
        
        ipaLabel.text = ipa // UILabel
        ipaDescription.text = "\(fileName)_description".localized // UITextView
        ipaDescription.scrollRangeToVisible(NSRange(location: 0, length: 0))
        example1.setTitle("\(fileName)_example1".localized, forState: UIControlState.Normal) // UIButton
        example2.setTitle("\(fileName)_example2".localized, forState: UIControlState.Normal) // UIButton
        example3.setTitle("\(fileName)_example3".localized, forState: UIControlState.Normal) // UIButton
        
    }
}

我在这里看不到任何会触发振动的东西...

更新 2

我创建了一个新项目并UIButton在情节提要中添加了一个。我在上述应用程序中振动的同一部手机上对其进行了测试。当我点击按钮时没有振动,所以上面的代码一定有什么东西触发了振动。但它可能是什么?

4

1 回答 1

4

AudioServicesPlayAlertSound会引起振动:

iPhone—播放指定的声音。如果用户已将设置应用程序配置为振铃振动,也会调用振动。

我会尝试AudioServicesPlaySystemSound

要播放不用作警报的短声音,请使用AudioServicesPlaySystemSound

于 2015-10-12T00:50:19.980 回答