2017-08-28 8 views
0

Ich entwickle eine App, die zufällig zwei CollectionView Zellen gleichzeitig auswählt. Ich habe das in Android erreicht, indem ich Handler verschiedene Runnables hinzugefügt habe. In iOS eine Zelle der Auswahl arbeitet perfekt mit diesem Code in Ordnung:Zwei Timer gleichzeitig ausführen

let randomNumber1 = Int(arc4random_uniform(UInt32(numberOfItems))) 
     print("random1",randomNumber1) 
     let indexPath1 = IndexPath.init(row: randomNumber1, section: 0) 
     self.previousIndexpath1 = indexPath1 
     self.collectionView(self.imageCollectionView, didSelectItemAt: indexPath1) 
     myTimer1 = Timer.scheduledTimer(timeInterval: TimeInterval(0.5), target: self, selector: #selector(AdvanceCollectionViewController.selectRow1), userInfo: nil, repeats: true) 
     let deadlineTime1 = DispatchTime.now() + .seconds(5) 
     DispatchQueue.main.asyncAfter(deadline: deadlineTime1, execute: { 
      self.myTimer1.invalidate() 
      // self.performSegue(withIdentifier: "collectionToDetail", sender: self) 
     }) 

nun den Timer für zwei Threads und zeigen ihren Index am Ende der Frist laufe ich. Dafür habe ich nur noch diesen Code, die einen anderen Thread erstellt:

let randomNumber2 = Int(arc4random_uniform(UInt32(numberOfItems))) 
     print("random2",randomNumber2) 
     let indexPath2 = IndexPath.init(row: randomNumber2, section: 0) 
     self.previousIndexpath2 = indexPath2 
     self.collectionView(self.imageCollectionView, didSelectItemAt: indexPath2) 
     myTimer2 = Timer.scheduledTimer(timeInterval: TimeInterval(0.5), target: self, selector: #selector(AdvanceCollectionViewController.selectRow2), userInfo: nil, repeats: true) 
     let deadlineTime2 = DispatchTime.now() + .seconds(5) 
     DispatchQueue.main.asyncAfter(deadline: deadlineTime2, execute: { 
      self.myTimer2.invalidate() 
      // self.performSegue(withIdentifier: "collectionToDetail", sender: self) 
     }) 

Beim Betrachten des Protokolls kann ich für beide Thread bekommen einloggen. Aber UI Cell Selection scheint nicht zwei Zellen auszuwählen. Ich bin neu in iOS, also nicht viel von Multithreading/Mulitple Timer in iOS.

Antwort

1

Diese Zeile wird nur die delegierte Methode genannt:

self.collectionView(self.imageCollectionView, didSelectItemAt: indexPath1) 

Wenn Sie das Produkt in der Benutzeroberfläche auswählen möchten, können Sie eine andere Methode, wie die folgenden nennen haben:

self.imageCollectionView.selectItem(at: indexPath1, animated: false, scrollPosition: .bottom) 

Sie wünschen können stellen Sie die Eigenschaft auch ein:

collectionView.allowsMultipleSelection = true 
Verwandte Themen