109 votes

Swift - Comment détecter les changements d'orientation

Je souhaite ajouter deux images à l'affichage d'une seule image (c'est-à-dire pour une image paysage et pour une autre image au portrait), mais je ne sais pas comment détecter les changements d'orientation à l'aide de langues rapides.

J'ai essayé cette réponse mais cela ne prend qu'une image

 override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.currentDevice().orientation.isLandscape.boolValue {
        print("Landscape")
    } else {
        print("Portrait")
    }
}
 

Je suis nouveau dans le développement iOS, tout conseil serait grandement apprécié!

138voto

Rutvik Kanbargi Points 1324
let const = "Background" //image name
let const2 = "GreyBackground" // image name
    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()

        imageView.image = UIImage(named: const)
        // Do any additional setup after loading the view.
    }

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        if UIDevice.current.orientation.isLandscape {
            print("Landscape")
            imageView.image = UIImage(named: const2)
        } else {
            print("Portrait")
            imageView.image = UIImage(named: const)
        }
    }

88voto

maslovsa Points 548

Swift 3 Utilisation de NotificationCenter

 override func viewDidLoad() {
    super.viewDidLoad()        

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.rotated), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
}

deinit {
     NotificationCenter.default.removeObserver(self)
}

func rotated() {
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
    } else {
        print("Portrait")
    }
}
 

64voto

Yaroslav Bay Points 639

Swift 3 Code ci-dessus mis à jour:

 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
    } else {
        print("Portrait")
    }
}
 

12voto

asetniop Points 165

Swift 3: J'utilisais ceci pour la conception de clavier logiciel, et pour une raison quelconque, la méthode UIDevice.current.orientation.isLandscape n'arrêtait pas de me dire que c'était "Portrait", alors voici ce que j'ai utilisé à la place:

 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    let screenSize = UIScreen.main.bounds
    let screenWidth = screenSize.width
    let screenHeight = screenSize.height

    if(screenWidth > screenHeight){
        //Landscape
    }
    else{
        //Portrait
    }

}
 

7voto

josuevhn Points 137

Si vous êtes à l'utilisation de Swift version >= 3.0 il y a quelques mises à jour du code, vous devez appliquer ce que d'autres ont déjà dit. Il suffit de ne pas oublier d'appeler super:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

   super.viewWillTransition(to: size, with: coordinator)

   // YOUR CODE OR FUNCTIONS CALL HERE

}

Si vous envisagez d'utiliser un Empilervoir pour vos images sachez que vous pouvez faire quelque chose comme ce qui suit:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

   super.viewWillTransition(to: size, with: coordinator)

   if UIDevice.current.orientation.isLandscape {

      stackView.axis = .horizontal

   } else {

      stackView.axis = .vertical

   } // else

}

Si vous êtes à l'aide de l'Interface Builder n'oubliez pas de sélectionner la classe personnalisée pour cette UIStackView objet, l'Identité de l'Inspecteur de la section dans le panneau de droite. Puis il suffit de créer (également par le biais de l'Interface Builder) le IBOutlet référence à la coutume UIStackView exemple:

@IBOutlet weak var stackView: MyStackView!

Prendre l'idée et de l'adapter à vos besoins. J'espère que cela peut vous aider!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X