2016-10-21 2 views
0

Новое для Swift и Xcode - Вам нужна помощь в воспроизведении нескольких аудиофайлов с несколькими кнопками. Я смог заставить его играть в один файл с помощью одной из кнопок, но не хочу писать всю программу для каждой кнопки!Swift xcode 8 - Использование нескольких кнопок и аудиофайлов

import UIKit 
import AVFoundation 

class SecondViewController: UIViewController { 

    var audioPlayer = AVAudioPlayer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // address of the music file 
     let music = Bundle.main.path(forResource: "File1", ofType: "mp3") 

     do { 
      audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: music!)) 
     } 
     catch{ 
      print("error") 
     } 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func Play(_ sender: AnyObject) { 
     audioPlayer.play() 
    } 


    @IBAction func stop(_ sender: AnyObject) { 
     audioPlayer.stop() 
     audioPlayer.currentTime = 0 
    } 

    @IBOutlet weak var myVolumeController: UISlider! 

    @IBAction func controlVolume(_ sender: AnyObject) { 
     audioPlayer.volume = myVolumeController.value 
    } 
} 
+0

установить уникальный 'тег' для каждого UIButton. В обычном методе (например, 'playSongWithTag:') инициализируйте 'audioPlayer'. Задайте имя ресурса в зависимости от значения тега. – pkc456

ответ

0

структура класса лучше всего выбрать для вас (быстрый 3):

import Foundation 
import UIKit 
class BUTTON { 


class func instanceFromNib() -> UIView { 
    return UINib(nibName: "nib file name", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView 
} 

var SELF :UIView 
var buttonText : String 

let BTN = UIButton(type: UIButtonType.custom) as UIButton 

// CONSTRUCT INIT 
init (UIView_ : UIView , buttonText_ : String) { 

    print("Button instance constructor") 
    SELF = UIView_; 
    buttonText = buttonText_; 

} 

func CREATE_BUTTON() { 

    BTN.setTitle(buttonText, for: UIControlState.normal) 
    BTN.backgroundColor = UIColor.red 
    BTN.frame.origin.x = 10 
    BTN.frame.origin.y = 100 
    BTN.frame.size = CGSize(width: 155, height: 155) 
    BTN.frame.origin = CGPoint(x: 10, y: 20) 
    BTN.setTitleColor(UIColor.black , for: UIControlState.normal) 
    SELF.addSubview(BTN) 

    //let image = UIImage(named: "name") as UIImage? 

    //BTN.setImage(image, forState: .Normal) 
    //BTN.addTarget(self, action: "btnTouched:", forControlEvents:.TouchUpInside) 


}} 

Используйте это так:

пусть myButton1 = BUTTON (UIView_: self.view, buttonText_: «Nidza «)

  • self.view может быть также настраиваемое представление или любой другой вид

В вашем примере вы можете поместить новую опцию в init как PLAYER. Каждая кнопка будет поставляться с собственным проигрывателем (выглядит как звуковой микшер).

+0

Спасибо всем, я смог заставить его работать, добавив переменную пути к каждому UIButton следующим образом: – ritepal

+0

@IBAction func playAudio4 (_ sender: UIButton) { let music = Bundle.main.path (forResource: "Audio4 », OfType: "mp3") сделать { аудиоплеера = попробовать AVAudioPlayer (contentsOf: URL (fileURLWithPath: музыка)) } задвижка { печать ("ошибка") } audioPlayer.play() } – ritepal

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