2016-01-13 7 views
2

Я строй приложения для iPhone/IPad, и я пытаюсь решить проблемы со звуком:Swift: Звук играет на тренажере, но не на устройстве

Приложение поставляется с таймером обратного отсчета четыре минут. Когда coundown достигает 00:00, это вызывает короткий звуковой эффект. Это отлично работает на разных тренажерах, но мой телефон остается тихим. Приложение построено для 7.1. Мне интересно, это из-за кода или если мой телефон не работает (у него есть проблемы со звуком). Мой код выглядит хорошо? Надеюсь, кто-то может помочь в этом.

Здесь:

import Foundation 
import UIKit 
import AVFoundation 


class VC11 : UIViewController { 


    @IBOutlet weak var timerLabel: UILabel! 



    var timer = NSTimer() 
    var count = 240 
    var timerRunning = false 
    var audioPlayer = AVAudioPlayer() 


    override func viewDidLoad() { 
     super.viewDidLoad() 


      func nextPage(sender:UISwipeGestureRecognizer) { 
       switch sender.direction { 

       case UISwipeGestureRecognizerDirection.Left: 
        print("SWIPED LEFT") 
        self.performSegueWithIdentifier("seg11", sender: nil) 
       default: 
        break 

       } 


       var leftSwipe = UISwipeGestureRecognizer (target: self, action: Selector("nextPage")) 
       var rightSwipe = UISwipeGestureRecognizer (target: self, action: Selector("nextPage")) 

       leftSwipe.direction = .Left 
       rightSwipe.direction = .Right 

       view.addGestureRecognizer(leftSwipe) 
       view.addGestureRecognizer(rightSwipe) 
      } 


     } 



    func updateTime() { 
     count-- 

      let seconds = count % 60 
      let minutes = (count/60) % 60 
      let hours = count/3600 
      let strHours = hours > 9 ? String(hours) : "0" + String(hours) 
      let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) 
      let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) 
      if hours > 0 { 
       timerLabel.text = "\(strHours):\(strMinutes):\(strSeconds)" 
      } 
      else { 
       timerLabel.text = "\(strMinutes):\(strSeconds)" 

     } 
     stopTimer() 


      } 
    @IBAction func startTimer(sender: AnyObject) { 
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true) 

    sender.setTitle("Running...", forState: .Normal) 

     } 


    func stopTimer() 

    { 

     if count == 0 { 
      timer.invalidate() 
      timerRunning = false 
      timerLabel.text = "04:00" 
      playSound() 
      count = 240 

     } 


    } 




    func playSound() { 

    var soundPath = NSBundle.mainBundle().pathForResource("Metal_Gong", ofType: "wav") 
    var soundURL = NSURL.fileURLWithPath(soundPath!) 


     self.audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil) 
     self.audioPlayer.play() 
    } 


} 

ответ

2

Убедитесь, что ваше устройство не запускается в автоматическом режиме.

Кроме того, для коротких системных звуков вы можете использовать системные звуки из AudioToolbox (https://developer.apple.com/library/ios/documentation/AudioToolbox/Reference/SystemSoundServicesReference/):

if let soundURL = NSBundle.mainBundle().URLForResource("Metal_Gong", withExtension: "wav") { 
    var mySound: SystemSoundID = 0 
    AudioServicesCreateSystemSoundID(soundURL, &mySound) 
    AudioServicesPlaySystemSound(mySound); 
} 
+0

Спасибо за ссылку и код. Где я могу добавить код? На данный момент я добавил его для переопределения func viewDidLoad() { super.viewDidLoad(), но он не работает. – mojomo

+0

Попытался добавить его к нескольким функциям, как в playSound(), увы, не повезло. – mojomo

+0

Попробуйте отладить его в 'updateTime()' функции. Печатать 'count' переменную NSLog после строки' count - '. Может быть, что-то не так с таймером, а не со звуком. – shpasta

0

Я только что узнал, что мой код делает работу - это только из-за мой разбитый телефон, звук не воспроизводится. Спасибо за помощь!

Смежные вопросы