Génération d'une image à partir d'une view; versions d'iOS

busterTheobusterTheo Membre
mars 2020 modifié dans Objective-C, Swift, C, C++ #1

Bonjour les collègues,

je serais bref.

Concernant la réalisation d'une image à partir d'une view avec ses subviews,
qui a déjà implémenter le bon code qui tient compte de ce qui suit ?

1- de l'Ios >= 10 ou < 10
2- des version swift différentes - 3, 4, 4,1, etc.

Depuis 3 semaines, j'ai écumé tout le web.
J'ai deux mac avec justement les Ios et swifts différents pour tester.
Et impossible d'y parvenir sur les 2 machines, même avec (if #available(iOS 10.0, *) { etc. )
Voir les mots-clés

grrr

Merci d'avance

Réponses

  • CéroceCéroce Membre, Modérateur

    Salut,

    D'après ce que je comprends, tu cherches à adapter le code selon la version de Swift utilisée par le compilateur. C'est possible:

    #if swift(>=4.1) {
    

    Toutefois la solution beaucoup plus simple est d'avoir la même version de Xcode partout (par exemple la dernière).
    Même pour les libs, la plupart des auteurs se contentent de limiter des versions de la lib à certaines version de Swift (par exemple: «La version 3 de la lib exige Swift 5 minimum»).

  • Merci Céroce.
    Je ne peux pas pour l'instant, à cause des anciennetés de mes macs, et donc des systèmes, et donc des versions Xcode, etc.

    Et le pb n'est pas que la version de swift, mais également, et surtout, de la version de l'Ios des utilisateurs (< 10 ou sup). (if #available(iOS 10.0, *) { etc. ) ET le else...

  • busterTheobusterTheo Membre
    mars 2020 modifié #4

    Vous allez rigolez.
    Au moment où je publie ce post, je parviens enfin à faire que cela fonctionne sur les 2 machines (iOS < 12 et >)

    Voici le code pour ceux que cela intéresse...

    if #available(iOS 12.0, *) {
        print("available")
        let renderer = UIGraphicsImageRenderer(size: viewPhoto.bounds.size)
        let photo = renderer.image { ctx in
            viewPhoto.drawHierarchy(in: viewPhoto.bounds, afterScreenUpdates: true)
        }
        UIGraphicsEndImageContext()
        loupe.choisirPhoto(photo)
    } else {
        print("NOT #available")
        UIGraphicsBeginImageContextWithOptions(viewPhoto.bounds.size, self.isOpaque, 0.0)
        viewPhoto.layer.render(in: UIGraphicsGetCurrentContext()!)
        let photo: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        loupe.choisirPhoto(photo)
    }
    
Connectez-vous ou Inscrivez-vous pour répondre.