2017-03-20 3 views
0

Snapchat과 같은 앱에서 스토리 기능을 만드는 중입니다. 나는 파이어 폭스의 비디오와 그림으로 채워 넣을 배열과 이야기에 대한 기본 정보를 가지고있다. 내가 겪고있는 문제는 snapchat이하는 방식으로 어레이를 통과하는 것입니다. 내 ViewController에 배열 내용을로드 할 수 있지만 그것을 원하는 방식으로 통해 수돗물 없습니다. 첫 번째 이야기가 연주 된 후와 마찬가지로 배열의 두 번째 이야기가 다음 이야기와 함께 자동으로 재생되기를 원합니다. 그러나 사용자가보기의 오른쪽을 탭하여 다음 이야기로 건너 뛰거나 왼쪽을 탭하여 이전 이야기로 이동할 수있게하려고합니다. 또는 배열의 첫 번째 스토리 인 경우 처음부터 재생하고 싶습니다. 하지만 분명히 내 코드가 설정되는 방식이 잘못되어 내가해야 할 일을하지 않는 것입니다. 여기 내 코드가있다. 먼저 Firebase에서 데이터를 가져 와서 ViewDidAppear에서 GetStories 함수를 호출하여 배열을 채 웁니다.내 앱이 Snapchat Stories와 같은 스토리를 재생하려고합니다.

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]) 
} 
+0

안녕을했다 이걸 어떻게 만드는지 알아 냈어? 나는 "이야기"체계를 창조하는 것에 관하여 온라인으로 아무것도 찾아 내지 않으며 신속하고 firebase를 사용하여 것을 대략 창조하고있다. 알려 주시면 함께 작업하겠습니다! –

+0

@WayneFilkins 아직 아무것도 없습니다. 하지만 내 응용 프로그램에는 여러 부분이 있으므로 방금 다른 작업을 시작했으며 나중에 저장하기로 결정했습니다. /. 하지만 이걸로 너와 일하는 걸 꺼려하지 않을거야 – Markinson

+0

어떻게 그랬니? 나는 이것을 할 계획이지만 인터넷에서 아무것도 발견하지 못했습니다. @WayneFilkins –

답변

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]) 
+0

어디에서 코드를 추가 할 수 있습니까? – Markinson

관련 문제