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



当屏幕上出现新页面时,我想播放一个声音文件。

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

有人能告诉我为了播放一系列声音,我必须把代码放在哪里吗?以便在image1出现在屏幕上时播放sound1

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)
}
}

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

如果您使用页面控件,您可能还可以将UIPageControl子类化,并在currentPage属性上使用didSet来确定播放哪个声音。

编辑:

只需添加一个新文件,使其成为Cocoatouch类,并使其成为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上选择页面控件;"身份检查器";,并将页面控件的类更改为自定义CustomPageControl类。完成后,每当页面索引发生更改时,就会调用上面的didSet方法。

最新更新