0

Création d'une application contenant des flashCards. Ils nécessitent sûrement la capacité de retourner une carte. Pour ce faire, j'ai un UIViewController et pour éviter d'inverser la vue entière j'ai implémenté ma sous-vue dans un conteneur. J'ai déclaré deux sous-vues dans le conteneur nommé frontView et backView. frontView obtenu un fond rouge et une étiquette indiquant avant tandis que backView a obtenu un fond bleu et une étiquette en disant en arrière.UIViewanimation trantitionfromView à l'aide de l'animation UIViewflip

J'ai déclaré une variable afin que je puisse vérifier de quel côté est showened: var showingFront = true Got une action UIButton qui appelle la func suivante:

if showingFront == true { 

     UIView.transitionFromView(forside, toView: bagside, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil) 

     showingFront = false 
    } else { 

     UIView.transitionFromView(bagside, toView: forside, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil) 

     showingFront = true 

    } 

Ce flips la vue avant et en arrière, mais le backgroundColor disparait avec les étiquettes et je ne peux voir que le retournement du conteneur? Toute aide est appréciée

Répondre

2

essayer cette façon: dans le story-board créer un UIView (largeur = 90, hauteur = 132) et changer la classe de "FlashCard"

aussi créer un bouton pour retourner la carte flash.

FlashCard:

import UIKit 

class ItemView: UIView { 

    var label:UILabel? 


    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override init(frame:CGRect){ 
     super.init(frame: frame) 
    } 

    convenience init(frame:CGRect, backgroundcolor:UIColor, labelText:String){ 
     self.init(frame: frame) 
     self.backgroundColor = backgroundcolor 
     self.contentMode = .ScaleAspectFit 

     label = UILabel(frame: CGRectMake(0,0,50,50)) 
     label!.textAlignment = NSTextAlignment.Center 
     label!.textColor = UIColor.whiteColor() 
     label?.center = self.center 
     label!.text = labelText 

     self.addSubview(label!) 

    } 

} 


class FlashCard: UIView { 

    var backView:ItemView? 
    var frontView:ItemView? 
    var isFrontView_CurrentlyVisable_onTheScreen = false 


    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 

     self.backgroundColor = UIColor.clearColor() 
     self.userInteractionEnabled=true 
     setupview() 


    } 

    override init(frame:CGRect){ 
     super.init(frame: frame) 
     self.backgroundColor = UIColor.clearColor() 
     self.userInteractionEnabled=true 
     setupview() 
    } 

    func setupview(){ 
    loadFront() 
    loadBack()  
    } 

    func loadFront(){ 

     if frontView == nil { 
      frontView = ItemView.init(frame: self.bounds, backgroundcolor: UIColor.redColor(), labelText: "Front") 
      self.addSubview(frontView!) 
      frontView?.hidden = true 
     } 
    } 

    func loadBack(){ 

     if backView == nil { 

      backView = ItemView.init(frame: self.bounds, backgroundcolor: UIColor.blueColor(), labelText: "Back") 
      self.addSubview(backView!) 
      backView?.hidden = false 
     } 


    } 

    func unloadBack(){ 
     backView?.removeFromSuperview() 
     backView=nil 
    } 


    func flip(){ 
     let ObjectToDisplay: ItemView 
     let currentlyVisableObjectOnScreen: ItemView 

     if isFrontView_CurrentlyVisable_onTheScreen{ 
      ObjectToDisplay = backView! 
      currentlyVisableObjectOnScreen = frontView! 
      isFrontView_CurrentlyVisable_onTheScreen = false 

     }else{ 
      ObjectToDisplay = frontView! 
      currentlyVisableObjectOnScreen = backView! 
      isFrontView_CurrentlyVisable_onTheScreen = true 
     } 

     if ObjectToDisplay.hidden{ 
      ObjectToDisplay.hidden = false 
     } 

     print("isFrontView_CurrentlyVisable_onTheScreen?: \(isFrontView_CurrentlyVisable_onTheScreen)") 

     UIView.transitionFromView(currentlyVisableObjectOnScreen, toView:ObjectToDisplay, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: {(done)->() in 
      if done{ 
       currentlyVisableObjectOnScreen.hidden = true 
      } 
     }) 
    } 


} 

dans votre viewcontroller:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var myButton: UIButton! 
    @IBOutlet weak var card: FlashCard! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 


    @IBAction func buttonPressed(sender: AnyObject) { 
     card.flip() 
    } 



} 
+0

simplement Woow ... Il fonctionne parfaitement, incroyable si intelligent, je vous remercie beaucoup! : D –

+0

De rien, je suis content de pouvoir vous aider :-) – Dasem