playing a sound file in a pageControler with Xcode and Swift












4














I would like to play a sound file when a new page comes on the screen.



So far I did that to have the pageControler working with an array of images.



Can someone tell me where I have to put my code in order to play an array of sound? So that the sound1 will be played when the image1 comes on the screen.



import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

@IBOutlet weak var pageControl: UIPageControl!
@IBOutlet weak var scrollView: UIScrollView!

var images: [String] = ["1", "2", "3", "4", "5"]
var frame = CGRect(x:0,y:0, width:0, height:0)

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

pageControl.numberOfPages = images.count
for index in 0..<images.count {
frame.origin.x = scrollView.frame.size.width * CGFloat(index)
frame.size = scrollView.frame.size

let imgView = UIImageView(frame: frame)
imgView.image = UIImage(named: images[index])
self.scrollView.addSubview(imgView)

}

scrollView.contentSize = CGSize(width:(scrollView.frame.size.width * CGFloat(images.count)), height: scrollView.frame.size.height)
scrollView.delegate = self
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
var pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
pageControl.currentPage = Int(pageNumber)
}
}









share|improve this question





























    4














    I would like to play a sound file when a new page comes on the screen.



    So far I did that to have the pageControler working with an array of images.



    Can someone tell me where I have to put my code in order to play an array of sound? So that the sound1 will be played when the image1 comes on the screen.



    import UIKit

    class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var pageControl: UIPageControl!
    @IBOutlet weak var scrollView: UIScrollView!

    var images: [String] = ["1", "2", "3", "4", "5"]
    var frame = CGRect(x:0,y:0, width:0, height:0)

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    pageControl.numberOfPages = images.count
    for index in 0..<images.count {
    frame.origin.x = scrollView.frame.size.width * CGFloat(index)
    frame.size = scrollView.frame.size

    let imgView = UIImageView(frame: frame)
    imgView.image = UIImage(named: images[index])
    self.scrollView.addSubview(imgView)

    }

    scrollView.contentSize = CGSize(width:(scrollView.frame.size.width * CGFloat(images.count)), height: scrollView.frame.size.height)
    scrollView.delegate = self
    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    var pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
    pageControl.currentPage = Int(pageNumber)
    }
    }









    share|improve this question



























      4












      4








      4


      1





      I would like to play a sound file when a new page comes on the screen.



      So far I did that to have the pageControler working with an array of images.



      Can someone tell me where I have to put my code in order to play an array of sound? So that the sound1 will be played when the image1 comes on the screen.



      import UIKit

      class ViewController: UIViewController, UIScrollViewDelegate {

      @IBOutlet weak var pageControl: UIPageControl!
      @IBOutlet weak var scrollView: UIScrollView!

      var images: [String] = ["1", "2", "3", "4", "5"]
      var frame = CGRect(x:0,y:0, width:0, height:0)

      override func viewDidLoad() {
      super.viewDidLoad()
      // Do any additional setup after loading the view, typically from a nib.

      pageControl.numberOfPages = images.count
      for index in 0..<images.count {
      frame.origin.x = scrollView.frame.size.width * CGFloat(index)
      frame.size = scrollView.frame.size

      let imgView = UIImageView(frame: frame)
      imgView.image = UIImage(named: images[index])
      self.scrollView.addSubview(imgView)

      }

      scrollView.contentSize = CGSize(width:(scrollView.frame.size.width * CGFloat(images.count)), height: scrollView.frame.size.height)
      scrollView.delegate = self
      }

      override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
      }

      func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
      var pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
      pageControl.currentPage = Int(pageNumber)
      }
      }









      share|improve this question















      I would like to play a sound file when a new page comes on the screen.



      So far I did that to have the pageControler working with an array of images.



      Can someone tell me where I have to put my code in order to play an array of sound? So that the sound1 will be played when the image1 comes on the screen.



      import UIKit

      class ViewController: UIViewController, UIScrollViewDelegate {

      @IBOutlet weak var pageControl: UIPageControl!
      @IBOutlet weak var scrollView: UIScrollView!

      var images: [String] = ["1", "2", "3", "4", "5"]
      var frame = CGRect(x:0,y:0, width:0, height:0)

      override func viewDidLoad() {
      super.viewDidLoad()
      // Do any additional setup after loading the view, typically from a nib.

      pageControl.numberOfPages = images.count
      for index in 0..<images.count {
      frame.origin.x = scrollView.frame.size.width * CGFloat(index)
      frame.size = scrollView.frame.size

      let imgView = UIImageView(frame: frame)
      imgView.image = UIImage(named: images[index])
      self.scrollView.addSubview(imgView)

      }

      scrollView.contentSize = CGSize(width:(scrollView.frame.size.width * CGFloat(images.count)), height: scrollView.frame.size.height)
      scrollView.delegate = self
      }

      override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
      }

      func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
      var pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
      pageControl.currentPage = Int(pageNumber)
      }
      }






      ios swift xcode audio






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 19 at 4:55









      kit

      1,1083616




      1,1083616










      asked Nov 19 at 0:49









      david andersson

      356




      356
























          1 Answer
          1






          active

          oldest

          votes


















          2














          I don't see a direct way to get called when the selected page changes. You could add code in your page view controller's setViewControllers(_:direction:animated:completion:) method that figures out which page is active and plays the appropriate sound.



          If you use a page control you could probably also subclass UIPageControl and use a didSet on the currentPage property to figure out which sound to play.



          Edit:



          Just add a new file, make it a Cocoa touch class, and make it a subclass of UIPageControl. Name it CustomPageControl. Then your implementation can be as simple as this:



          import UIKit



          class CustomPageControl: UIPageControl {

          override var currentPage: Int {
          didSet {
          //Your code to play sounds based on selected index could go
          //here, or broadcast a notification that your view controller
          //would listen for
          print("New page index = (currentPage)")
          }
          }
          }


          Then just select the page control on your UIPageViewController, select the "Identity Inspector", and change the class of the page control to your custom CustomPageControl class. Once you've done that, whenever your page index changes, the didSet method above will be called.






          share|improve this answer























          • thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
            – david andersson
            Nov 20 at 18:34










          • No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
            – Duncan C
            Nov 20 at 18:40










          • thx. I will investigate
            – david andersson
            Nov 20 at 18:46










          • @davidandersson It just tried it and it works. I'll edit my answer.
            – Duncan C
            Nov 20 at 18:53












          • @Ducan C thx a lot! I will try! many thx
            – david andersson
            Nov 20 at 20:48











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53366985%2fplaying-a-sound-file-in-a-pagecontroler-with-xcode-and-swift%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          I don't see a direct way to get called when the selected page changes. You could add code in your page view controller's setViewControllers(_:direction:animated:completion:) method that figures out which page is active and plays the appropriate sound.



          If you use a page control you could probably also subclass UIPageControl and use a didSet on the currentPage property to figure out which sound to play.



          Edit:



          Just add a new file, make it a Cocoa touch class, and make it a subclass of UIPageControl. Name it CustomPageControl. Then your implementation can be as simple as this:



          import UIKit



          class CustomPageControl: UIPageControl {

          override var currentPage: Int {
          didSet {
          //Your code to play sounds based on selected index could go
          //here, or broadcast a notification that your view controller
          //would listen for
          print("New page index = (currentPage)")
          }
          }
          }


          Then just select the page control on your UIPageViewController, select the "Identity Inspector", and change the class of the page control to your custom CustomPageControl class. Once you've done that, whenever your page index changes, the didSet method above will be called.






          share|improve this answer























          • thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
            – david andersson
            Nov 20 at 18:34










          • No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
            – Duncan C
            Nov 20 at 18:40










          • thx. I will investigate
            – david andersson
            Nov 20 at 18:46










          • @davidandersson It just tried it and it works. I'll edit my answer.
            – Duncan C
            Nov 20 at 18:53












          • @Ducan C thx a lot! I will try! many thx
            – david andersson
            Nov 20 at 20:48
















          2














          I don't see a direct way to get called when the selected page changes. You could add code in your page view controller's setViewControllers(_:direction:animated:completion:) method that figures out which page is active and plays the appropriate sound.



          If you use a page control you could probably also subclass UIPageControl and use a didSet on the currentPage property to figure out which sound to play.



          Edit:



          Just add a new file, make it a Cocoa touch class, and make it a subclass of UIPageControl. Name it CustomPageControl. Then your implementation can be as simple as this:



          import UIKit



          class CustomPageControl: UIPageControl {

          override var currentPage: Int {
          didSet {
          //Your code to play sounds based on selected index could go
          //here, or broadcast a notification that your view controller
          //would listen for
          print("New page index = (currentPage)")
          }
          }
          }


          Then just select the page control on your UIPageViewController, select the "Identity Inspector", and change the class of the page control to your custom CustomPageControl class. Once you've done that, whenever your page index changes, the didSet method above will be called.






          share|improve this answer























          • thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
            – david andersson
            Nov 20 at 18:34










          • No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
            – Duncan C
            Nov 20 at 18:40










          • thx. I will investigate
            – david andersson
            Nov 20 at 18:46










          • @davidandersson It just tried it and it works. I'll edit my answer.
            – Duncan C
            Nov 20 at 18:53












          • @Ducan C thx a lot! I will try! many thx
            – david andersson
            Nov 20 at 20:48














          2












          2








          2






          I don't see a direct way to get called when the selected page changes. You could add code in your page view controller's setViewControllers(_:direction:animated:completion:) method that figures out which page is active and plays the appropriate sound.



          If you use a page control you could probably also subclass UIPageControl and use a didSet on the currentPage property to figure out which sound to play.



          Edit:



          Just add a new file, make it a Cocoa touch class, and make it a subclass of UIPageControl. Name it CustomPageControl. Then your implementation can be as simple as this:



          import UIKit



          class CustomPageControl: UIPageControl {

          override var currentPage: Int {
          didSet {
          //Your code to play sounds based on selected index could go
          //here, or broadcast a notification that your view controller
          //would listen for
          print("New page index = (currentPage)")
          }
          }
          }


          Then just select the page control on your UIPageViewController, select the "Identity Inspector", and change the class of the page control to your custom CustomPageControl class. Once you've done that, whenever your page index changes, the didSet method above will be called.






          share|improve this answer














          I don't see a direct way to get called when the selected page changes. You could add code in your page view controller's setViewControllers(_:direction:animated:completion:) method that figures out which page is active and plays the appropriate sound.



          If you use a page control you could probably also subclass UIPageControl and use a didSet on the currentPage property to figure out which sound to play.



          Edit:



          Just add a new file, make it a Cocoa touch class, and make it a subclass of UIPageControl. Name it CustomPageControl. Then your implementation can be as simple as this:



          import UIKit



          class CustomPageControl: UIPageControl {

          override var currentPage: Int {
          didSet {
          //Your code to play sounds based on selected index could go
          //here, or broadcast a notification that your view controller
          //would listen for
          print("New page index = (currentPage)")
          }
          }
          }


          Then just select the page control on your UIPageViewController, select the "Identity Inspector", and change the class of the page control to your custom CustomPageControl class. Once you've done that, whenever your page index changes, the didSet method above will be called.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 20 at 18:57

























          answered Nov 19 at 1:00









          Duncan C

          91.7k13114194




          91.7k13114194












          • thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
            – david andersson
            Nov 20 at 18:34










          • No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
            – Duncan C
            Nov 20 at 18:40










          • thx. I will investigate
            – david andersson
            Nov 20 at 18:46










          • @davidandersson It just tried it and it works. I'll edit my answer.
            – Duncan C
            Nov 20 at 18:53












          • @Ducan C thx a lot! I will try! many thx
            – david andersson
            Nov 20 at 20:48


















          • thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
            – david andersson
            Nov 20 at 18:34










          • No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
            – Duncan C
            Nov 20 at 18:40










          • thx. I will investigate
            – david andersson
            Nov 20 at 18:46










          • @davidandersson It just tried it and it works. I'll edit my answer.
            – Duncan C
            Nov 20 at 18:53












          • @Ducan C thx a lot! I will try! many thx
            – david andersson
            Nov 20 at 20:48
















          thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
          – david andersson
          Nov 20 at 18:34




          thx a lot! I will try but I don't know how to subclass UIPageControl. do you maybe have a link that can be useful for me? thank you very much for your time
          – david andersson
          Nov 20 at 18:34












          No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
          – Duncan C
          Nov 20 at 18:40




          No, I don't have a link. I pulled that idea out of my... hat. Yeah, my hat.
          – Duncan C
          Nov 20 at 18:40












          thx. I will investigate
          – david andersson
          Nov 20 at 18:46




          thx. I will investigate
          – david andersson
          Nov 20 at 18:46












          @davidandersson It just tried it and it works. I'll edit my answer.
          – Duncan C
          Nov 20 at 18:53






          @davidandersson It just tried it and it works. I'll edit my answer.
          – Duncan C
          Nov 20 at 18:53














          @Ducan C thx a lot! I will try! many thx
          – david andersson
          Nov 20 at 20:48




          @Ducan C thx a lot! I will try! many thx
          – david andersson
          Nov 20 at 20:48


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53366985%2fplaying-a-sound-file-in-a-pagecontroler-with-xcode-and-swift%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          404 Error Contact Form 7 ajax form submitting

          How to know if a Active Directory user can login interactively

          TypeError: fit_transform() missing 1 required positional argument: 'X'