Ios 通过显示单个单元格的UICollectionView来触发函数

Ios 通过显示单个单元格的UICollectionView来触发函数,ios,iphone,swift,Ios,Iphone,Swift,我目前正在制作一个Pokedex应用程序,这是我的第一个应用程序 这是我正在使用的视图的屏幕截图 屏幕截图是在滑动中拍摄的,显示我希望如何触发UI更新 口袋妖怪图片的顶部栏是一个UICollectionView,显示单个UICollectionViewCell。我想触发一个功能,更新用户界面到下一个口袋妖怪时,图片是一半离开屏幕 我尝试了以下方法: func UICollectionView DiEndDisplayingCell func UICollectionView cellForIt

我目前正在制作一个Pokedex应用程序,这是我的第一个应用程序

这是我正在使用的视图的屏幕截图

屏幕截图是在滑动中拍摄的,显示我希望如何触发UI更新

口袋妖怪图片的顶部栏是一个UICollectionView,显示单个UICollectionViewCell。我想触发一个功能,更新用户界面到下一个口袋妖怪时,图片是一半离开屏幕

我尝试了以下方法:

  • func UICollectionView DiEndDisplayingCell

  • func UICollectionView cellForItemAtIndexPath

  • func UICollectionView willDisplayCell

问题是它们触发得太迟或太早

我还尝试使用scrollViewDidScroll的内容偏移量:

func scrollViewDidScroll(scrollView: UIScrollView) {

    let bounds = UIScreen.mainScreen().bounds
    let width = bounds.size.width
    let offset = self.collectionView.contentOffset.x

    var pokeID = Int((offset-width/2)/width+2) {
        didSet {
            print("Change Detected")
        }
    }
    print(offset)
    print(pokeID)
}
此代码打印正确的口袋妖怪。我尝试使用willSet和didSet来触发“pokeID”的变化,但没有任何运气。
有人对我如何做到这一点有什么想法吗?

听起来你想要这样的东西:

private var currentPokeID: Int = -1 {
    didSet {
        if currentPokeID != oldValue {
            updateViews()
        }
    }
}

func scrollViewDidScroll(scrollView: UIScrollView) {
    let bounds = self.collectionView.bounds
    let midpoint = CGPointMake(bounds.midX, bounds.midY)
    if let indexPath = self.collectionView.indexPathForItemAtPoint(midpoint) {
        currentPokeID = indexPath.item
    }
}

你说“我试过使用willSet和didSet”,但你没有说你把这些观察者放在了什么属性上。向我们展示您尝试过的代码。我编辑代码以显示我尝试过的基本内容。我确实研究了willSet-didSet特性,我是否需要将变量嵌套在类或结构中?这是一个不错的选择。非常感谢你的帮助。