试图让我的应用程序播放像Snapchat Stories这样的故事

时间:2017-03-20 16:22:36

标签: ios arrays swift firebase firebase-realtime-database

我正在像Snapchat这样在我的应用中创建故事功能。我有一个数组,我填写了来自firebase的视频和图片以及有关故事的一些基本信息。我遇到的问题是像Snapchat一样经历阵列。我能够将数组内容加载到我的ViewController上,但我无法按照我想要的方式点击它。就像在第一个故事播放之后,我希望数组中的第二个故事能够自动播放,然后再播放下一个故事。但我也希望用户能够点击视图的右侧跳到下一个故事或点击左侧转到上一个故事。或者,如果它是数组中的第一个故事,我希望它从一开始就播放。但显然我的代码设置方式是错误的,而不是我需要做的事情。这是我的代码。 首先,我从Firebase获取数据并通过调用ViewDidAppear中的GetStories函数来填充数组。

func GetTheStories() {
    print("the EventID is \(self.EventID)")
    self.ref = FIRDatabase.database().reference(fromURL: "https://pondu-7db05.firebaseio.com/")

    let dataRef = self.ref.child("Stories")

    dataRef.observe(.value, with: { snapshot in

        if ( snapshot.value is NSNull ) {
            print("not found")

        } else {

            for Stories in (snapshot.children) {

                let snap = Stories as! FIRDataSnapshot //each child is a snapshot
                let dictionary = snap.value as? [String: AnyObject] // the value is a dict

                if self.EventID == dictionary?["EventID"] as! String! {

                    self.StoryURL = dictionary?["Story Link"] as? String!
                    self.UserID = dictionary?["UserID"] as? String!

                    self.fileArray.append(self.StoryURL)

                }


            }
            print("the array has this info in it \(self.fileArray) , okay cool")
            self.getFileType(self.fileArray[0])

        }

    })

 }

然后我调用函数GetFileType来确定文件是图像还是视频(这段代码有点混乱,但那是另一个问题)。

func getFileType(_ thefile:String){

    var indexOfUrl:[Character] = []

    for i in thefile.characters {
        //print(i)

        indexOfUrl.append(i)
    }

    let letterIndex = indexOfUrl.count - 1
    print("index \(letterIndex)")


    let chac1 = indexOfUrl[letterIndex]
    let chac2 = indexOfUrl[letterIndex - 1]
    let chac3 = indexOfUrl[letterIndex - 2]

    print("chac3 \(chac3)")

    let fileType = "\(chac3)\(chac2)\(chac1)"

    print("file type \(chac3)\(chac2)\(chac1)")



    if (fileType == videoTypes[0]) || (fileType == videoTypes[1]) || (fileType == videoTypes[2]) || (fileType == videoTypes[3]) || (fileType == videoTypes[4]) {

        self.isVideo(thefile)
        print("file type \(fileType)")
        print(thefile)




    }else{
    print("its a picture")

        self.isImage(thefile)
       // print("file type \(fileType)")
       // print(thefile)

    }


}

完成所有这些后,我允许用户使用下面的代码点击数组。现在这是我想要解决的主要问题。我已经知道我在这里做错了但我想我对编程找出更好的解决方案还不够了解。

@IBAction func Forward(_ sender: UIButton) {


    getFileType(fileArray[+1])
}

@IBAction func Backward(_ sender: UIButton) {

    let max = UInt32(fileArray.count)

    let ran = Int(arc4random_uniform(max))

    getFileType(fileArray[ran])

    self.getFileType(self.fileArray[0])

}

我打电话给这个功能,让玩家在完成比赛后进入下一个故事。

func playerPlaybackDidEnd(_ player: Player) {
    print("play back")
    getFileType(fileArray[+1])
}

1 个答案:

答案 0 :(得分:0)

为什么要在数组中执行+1?为什么没有一个全局变量来存储当前显示的视频,然后递增:

guard globalVar + 1 < fileArray.count else {
    //finish watching videos here
    return
}
globalVar += 1
getFileType(fileArray[globalVar])

或者如果用户按下,并想要转到上一个视频:

guard globalVar - 1 > 0 else {
    getFileType(fileArray[0])
    return
}
globalVar -= 1
getFileType(fileArray[globalVar])