试图弄清楚如何读取Apple耳机的音量按钮以用作相机快门的触发器(就像Apple相机应用程序那样)。
从文档上远程控制事件, 随事件接收远程控制, and 这个 git 仓库,我拼凑出我可能需要一个AVAudioPlayer
目的,.beginReceivingRemoteControlEvents()
, and remoteControlReceivedWithEvent
,同时制作此视图canBecomeFirstResponder()
return true
.
import UIKit
import AVFoundation
class ViewController: UIViewController, AVAudioPlayerDelegate {
var player: AVAudioPlayer!
override func viewDidLoad() {
super.viewDidLoad()
var session: AVAudioSession = AVAudioSession.sharedInstance()
session.setActive(true, error: nil)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
println("viewDidAppear worked...")
self.becomeFirstResponder()
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override func remoteControlReceivedWithEvent(event: UIEvent) {
let rc = event.subtype
println("does this work? \(rc.rawValue)")
//takePicture()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我期望得到"does this work"
当按下耳机上的音量按钮时,我只是看到它像平常一样调整耳机音量。所以我一定错过了一些东西,也许是delegate
or AVSession
?
我交叉发布了这个r/swift,我被告知它可能需要播放音频(直接从文档引用)。
因此,虽然这不是理想的解决方案,但它适合我自己的私人使用。
import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController, AVAudioPlayerDelegate {
var testPlayer: AVAudioPlayer? = nil
func loadSound(filename: NSString) -> AVAudioPlayer {
let url = NSBundle.mainBundle().URLForResource(filename as String, withExtension: "caf")
var error: NSError? = nil
let player = AVAudioPlayer(contentsOfURL: url, error: &error)
if error != nil {
println("Error loading \(url): \(error?.localizedDescription)")
} else {
player.prepareToPlay()
}
return player
}
override func viewDidLoad() {
super.viewDidLoad()
self.testPlayer = self.loadSound("silence")
self.testPlayer?.numberOfLoops = -1
self.testPlayer?.play()
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
self.becomeFirstResponder()
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
}
override func remoteControlReceivedWithEvent(event: UIEvent) {
let rc = event.subtype
println("rc.rawValue: \(rc.rawValue)")
// take photo
}
}
我注意到在苹果的相机应用程序中,+/- 音量按钮触发相机,麦克风按钮暂停/播放另一个应用程序中运行的任何音频,但在此实现中,音量按钮仍然控制音量(并且任何音频已暂停)当应用程序启动时)。
An rc.rawValue: 103
对应单击麦克风按钮,双击返回104
,然后三次单击返回105
,然后有时一次碰撞一对会返回108
or 109
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)