Utiliser PDF comme image en Xcode 9 / iOS11

Quelqu'un a trouver comment jouer avec un UIImageView dont l'image est en PDF ?


 


Si je mets les contraintes en haut, sur les deux côtés et je fixe l'hauteur, tout va bien ; l'image est bien nette.


 


Autrement, si je centre l'image sur les contraintes centre vertical et centre horizontal avec une hauteur fixe et un aspect de 1:1, l'image est floue.


 


Bogue ?


Réponses

  • CéroceCéroce Membre, Modérateur

    À quoi as-tu réglé l'aspect fit ?


    Sur iOS, il est possible que les .pdf soient rastérisés AVANT l'affichage, contrairement à  macOS.


  • Du coup Joanna tu as trouvé la solution à  ton problème ?  :)


  • Joanna CarterJoanna Carter Membre, Modérateur

    Non  >:(


  • Joanna CarterJoanna Carter Membre, Modérateur

    Puis, tout d'un coup, je l'ai trouvé !!!


     


    Grace à  https://spin.atomicobject.com/2015/06/03/ios-square-view-auto-layout/plus mes propres modifications.


     


    Au moins, ça va sur tous les simulateurs pour les iPhones n+ et les iPads, mais pas sur les iPhones "normaux".


     


    Voici les résultats, fait avec un seul fichier pdf pour le tabBar icône et l'image :


     




  • Non  >:(




    Ouf, finalement elle est bien humaine, avec ses défauts et ses échecs.


     


     




    Puis, tout d'un coup, je l'ai trouvé !!!


     




     


    Bah non finalement elle n'est vraiment pas humaine .. Ou elle a vendue son âme au diable !

  • C'est quoi que tu appelles les iPhone "normaux" ?




  • C'est quoi que tu appelles les iPhone "normaux" ?




    Ceux qui n'ont pas de " + " dans le nom.

  • CéroceCéroce Membre, Modérateur
    octobre 2017 modifié #9
    Je n'en suis pas certain, mais voici une piste.

    Je suppose que le PDF est rendu dans la CALayer de l'ImageView lors de l'affichage initial. Tu dois pouvoir le tester en mettant un point d'arrêt sur UIImageView.drawRect().

    Par la suite, si les dimensions de l'imageView changent, la CALayer est simplement étirée, son contenu n'est pas recalculé. Tu peux changer ce comportement en utilisant la propriété UIView.contentMode = .redraw. Attention, l'impact sur les performances est significatif, on s'en rend bien compte lors des rotations.

    Evidemment, si l'imageView conserve ses dimensions, il n'y a plus de problème. J'ai l'impression que c'est la solution que tu as adoptée.
  • Si je comprends bien Céroce il vaut mieux des le départ avoir bien en tête les dimensions de ton image et créer une UIImageView en conséquence plutôt que de laisser les auto layout dimensionner l'image correctement ?


  • Joanna CarterJoanna Carter Membre, Modérateur

    J'ai changé le contentMode = .redraw dans IB mais aucune différence  :(


     


    Sur l'iPhone 8 :


     


  • CéroceCéroce Membre, Modérateur
    octobre 2017 modifié #12
    Attends, comment ajoutes-tu l'image à  ton projet ? Si tu mets le PDF dans les Assets, il va être converti en .png lors de la phase de build. ça expliquerait les différences selon les modèles.


  • Attends, comment ajoutes-tu l'image à  ton projet ? Si tu mets le PDF dans les Assets, il va être converti en .png lors de la phase de build. ça expliquerait les différences selon les modèles.




     


    Même si tu dis que c'est une image unique pour tous les formats ?


  • Joanna CarterJoanna Carter Membre, Modérateur


    Attends, comment ajoutes-tu l'image à  ton projet ? Si tu mets le PDF dans les Assets, il va être converti en .png lors de la phase de build. ça expliquerait les différences selon les modèles.




     


    D'après ce que je pensais comprendre, en iOS 11, les pdfs sont désormais utilisés sans conversion ?


     


    J'ai ajouté le pdf dans l'Assets et la réglé comme ci :


     


  • Joanna CarterJoanna Carter Membre, Modérateur
    octobre 2017 modifié #15

    Enfin !!! Le truc, c'est de ne pas définir l'image dans IB mais de la mettre dans l'imageView dans viewDidLoad()


     


    Du coup, je peux utiliser les contraintes minimales que j'ai prévu avant d'experimenter avec les pdfs


     


    Merci Ceroce, ça fonctionne bien dans tous les bidules 


Connectez-vous ou Inscrivez-vous pour répondre.