2016-10-06 3 views
0

Je fais une sorte de roue de la fortune dans iOS avec Swift 3. J'ai utilisé une bibliothèque avec un UIPickerView, j'ai personnalisé les vues, j'ai fait les rangées sans fin (de sorte que l'utilisateur a la idée qu'il fait défiler des objets interminables).Swift 3 UIPickerView par programmation commencer à tourner

Le seul problème est que l'utilisateur peut glisser lentement à travers les prix dans la roue de la fortune, donc fondamentalement, il peut choisir le prix qu'il veut. Mais pour empêcher cela, chaque fois que l'utilisateur tapote ou fait glisser la roue, je fais tourner l'UIPickerView et, avec un nombre aléatoire, je décide du résultat de la roue de la fortune.

Je sais comment ajouter des reconnaisseurs de gestes à la roue, mais la seule chose que je ne sais pas est de savoir comment démarrer le tournage UIPickerView par programmation.

Merci d'avance!

Répondre

1

Je pense que vous cherchez ceci:

pick.selectRow(10, inComponent: 0, animated: true) 

Mais si vous voulez voir un exemple complet que j'ai fait pour vous.

class ViewController: UIViewController, UIPickerViewDataSource{ 

@IBOutlet var pick: UIPickerView! 

var myArr = [Int]() 

var myT = Timer() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    for element in 0...100 { 

     myArr.append(element) 
     } 


    myT = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(ViewController.movePicker), userInfo: nil, repeats: true) 



} 



//MARK: - move picker 

func movePicker() { 


    let position = Int(arc4random_uniform(89) + 10) 


    pick.selectRow(position, inComponent: 0, animated: true) 
    pick.showsSelectionIndicator = true 

    if position == 50 || position == 72 || position == 90 || position == 35 { 

     myT.invalidate() 

     let alert = UIAlertController(title: "You Won!!", message: "Congratulations!!!", preferredStyle: .alert) 
     let buttonOK = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil) 
     let playAgain = UIAlertAction(title: "Play Again!", style: .default, handler: { (action) in 

      self.myT = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(ViewController.movePicker), userInfo: nil, repeats: true) 
     }) 

     alert.addAction(buttonOK) 
     alert.addAction(playAgain) 

     present(alert, animated: true, completion: nil) 



    } 

} 




//MARK: - picker 
func numberOfComponents(in pickerView: UIPickerView) -> Int { 

    return 1 

} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return myArr.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return "\(myArr[row])" 
} 


} 

J'espère que je vous ai aidé

+0

Exactement ce que je voulais! Maintenant, je dois juste trouver un moyen de désactiver le balayage lent de la roue ou simplement désactiver le balayage du tout et seulement en tapant! Bu merci, c'était exactement ce que je cherchais! – Charlotte1993