使用 Xcode 和 Swift 在 pageControler 中播放声音文件

Posted

技术标签:

【中文标题】使用 Xcode 和 Swift 在 pageControler 中播放声音文件【英文标题】:playing a sound file in a pageControler with Xcode and Swift 【发布时间】:2018-11-19 00:49:29 【问题描述】:

我想在屏幕出现新页面时播放声音文件。

到目前为止,我这样做是为了让 pageControler 处理一组图像。

谁能告诉我我必须把代码放在哪里才能播放一系列声音?这样sound1就会在image1出现在屏幕上时播放。

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)
   

【问题讨论】:

【参考方案1】:

当所选页面更改时,我没有看到直接调用的方法。您可以在页面视图控制器的 setViewControllers(_:direction:animated:completion:) 方法中添加代码,以确定哪个页面处于活动状态并播放适当的声音。

如果您使用页面控件,您可能还可以继承 UIPageControl 并在 currentPage 属性上使用 didSet 来确定要播放的声音。

编辑:

只需添加一个新文件,使其成为 Cocoa touch 类,并使其成为UIPageControl 的子类。将其命名为CustomPageControl。那么你的实现可以像这样简单:

导入 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)")
        
    

然后只需选择 UIPageViewController 上的页面控件,选择“Identity Inspector”,并将页面控件的类更改为您自定义的CustomPageControl 类。一旦你这样做了,每当你的页面索引发生变化时,上面的 didSet 方法就会被调用。

【讨论】:

非常感谢!我会尝试,但我不知道如何继承 UIPageControl。你可能有一个对我有用的链接吗?非常感谢您的宝贵时间 不,我没有链接。我把这个想法从我的……帽子里拿出来了。是的,我的帽子。 @davidandersson 它刚刚尝试过并且有效。我将编辑我的答案。 @Ducan C:我试过了,但在控制台中我有那个而不是页码:2018-11-20 15:54:20.707685-0500 audioBook[72322:3225706] CreateMetadataFromXMPBufferInternal:566: Thew错误 #201(XML 解析失败) 我们没有在任何地方谈论过 XML。看起来您的代码中的其他地方有错误。

以上是关于使用 Xcode 和 Swift 在 pageControler 中播放声音文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Interface Builder 和 Swift 在 xCode6 中正确创建故事板

在 Xcode 8 和 Swift 3 中将 UITextField 转换为 Integer 并使用它们进行计算

在 Xcode 6.3 (Swift) 中使用 Parse 和 Facebook 框架编译错误

swift 3 Xcode 8 中的 NSManagedObject 和 CoreData

尝试将 IQKeyboardManager 与 Xcode 和 Swift 一起使用时出错

Xcode 7 和基于 swift 的框架