小编Bha*_*ani的帖子

从今日扩展(小部件)在主机应用程序中执行操作,无需打开应用程序ios

我想在今天的扩展程序(Widget)中管理包含app的一些操作.

完整描述:在我的包含应用程序中,执行一些操作(如播放/暂停音频).并希望从今天的扩展(小部件)管理该操作.动作也继续在后台状态下执行.

在今天的扩展中,将执行相同的操作.因此,如果在主要包含应用程序中已经启动操作并将其发送到后台状态,则用户可以暂停窗口小部件的操作.并且用户还可以随时从小部件(今天的扩展)开始/暂停操作.

为了实现这个目标,我使用UserDefault和app Group功能并存储一个布尔值.当小部件出现时,它检查布尔值并设置按钮状态播放/暂停.它设置正确,但当我按下扩展按钮时,操作无法在主机应用程序中执行.

码:

在主要包含应用程序代码

override func viewDidLoad() {
    super.viewDidLoad()
    let objUserDefault = UserDefaults(suiteName:"group.test.TodayExtensionSharingDefaults")

    let objTemp = objUserDefault?.object(forKey: "value")

    self.btnValue.isSelected = objTemp

    NotificationCenter.default.addObserver(self, selector: #selector(self.userDefaultsDidChange), name: UserDefaults.didChangeNotification, object: nil)
}




func userDefaultsDidChange(_ notification: Notification) {

        let objUserDefault = UserDefaults(suiteName: "group.test.TodayExtensionSharingDefaults")
        objUserDefault?.synchronize()   
        let objTemp = objUserDefault?.object(forKey: "value")
        self.btnValue.isSelected = objTemp
  }
Run Code Online (Sandbox Code Playgroud)

在扩展类中:

@IBAction func onPlayPause(_ sender: UIButton) {
       DispatchQueue.main.async {
       let sharedDefaults = UserDefaults(suiteName: "group.test.TodayExtensionSharingDefaults")

       if let isPlaying = sharedDefaults?.bool(forKey: "isPlaing") {

       sharedDefaults?.set(!isPlaying, forKey: "isPlaying")

       }else{

        sharedDefaults?.set(false, forKey: "isPlaying") …
Run Code Online (Sandbox Code Playgroud)

ios swift today-extension swift3

17
推荐指数
2
解决办法
4393
查看次数

同时录制视频和播放音频ios

我想同时录制视频和播放音频.当开始录制视频,预加载音频开始播放和停止视频录制时,音频也会停止播放.

我尝试使用第三方库" SwiftyCam "(https://github.com/Awalz/SwiftyCam)录制视频,并在开始写视频录制文件时以委托方式开始播放音频.

主ViewCOntroller代码如下:

override func viewDidAppear(_ animated: Bool) {
 super.viewDidAppear(animated)
 var temp = Data()
 let audioPath = Bundle.main.path(forResource: "ab1-FAST", ofType: "mp3")
        temp = FileManager.default.contents(atPath: (audioPath)!)!
     do {
            player = try  AVAudioPlayer(data: temp)
        }
        catch let error {

            print(error)
        }

        self.configureAudioSession()
        player!.delegate = self
        self.player!.prepareToPlay()
}

    // MARK: -
    // MARK: - SwiftyCamViewControllerDelegate method

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didBeginRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
  self.player?.play()
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishRecordingVideo camera: SwiftyCamViewController.CameraSelection) 
{
        if self.player != nil{
            if …
Run Code Online (Sandbox Code Playgroud)

video-capture avaudioplayer ios swift swift3

17
推荐指数
1
解决办法
1651
查看次数