2017-08-28 5 views
0

私はランダムに2つのCollectionViewセルをランダムに選択するアプリを開発しています。ハンドラに別のRunnablesを追加して、アンドロイドでこれを達成しました。一つのセルを選択するのiOSで は、このコードを完全に正常に動作している:同時に2つのタイマーを実行する

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

今、私は2つのスレッドのためのタイマーを実行して、期限の終わりに彼らのインデックスを表示します。

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

ログを表示しているとき、私は、スレッドの両方のためにログを取得することができます。そのために私は別のスレッドを作成し、このコードを追加しました。しかし、UIセル選択は2つのセルを選択するようには見えません。私はiOSの初心者ですので、iOSのマルチスレッド/マルチタイマをあまり気にしません。

答えて

1

のみデリゲートメソッドと呼ばれるこの行:あなたはUI内の項目を選択したい場合は、以下のような別のメソッドを呼び出す必要があり

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

self.imageCollectionView.selectItem(at: indexPath1, animated: false, scrollPosition: .bottom) 
あなたがしたいことがあり

プロパティを設定します。

collectionView.allowsMultipleSelection = true 
関連する問題