2010-07-22 7 views
1

J'ai un programme en cours d'exécution magnifiquement sur mon iPhone 4. Il utilise une classe UIView j'ai créé (appelé TestView) pour dessiner des graphiques en utilisant Quartz (très simplement des graphiques tels que seulement quelques lignes de CG et cercles). J'ai besoin, cependant, de tirer profit du nouvel écran haute résolution sur l'iPhone 4. À l'heure actuelle, l'assurer la compatibilité avec l'iPhone 3, se déplaçant par un seul « point » dans votre code provoque un mouvement de 2 pixels sur l'écran de l'iPhone 4 . En mettant à jour un UIView à un facteur d'échelle de 2.0, vous pouvez modifier la cartographie de l'espace de coordonnées logiques à l'espace de pixels pour profiter de la haute résolution de l'iPhone 4. Il devrait être facile; Je ne trouve tout simplement aucune documentation sur la façon de changer le facteur d'échelle UIView.Mise à jour UIView à ScaleFactor 2.0 pour l'iPhone4

Par exemple, une ligne je dessine, qui devrait spécifié par la fonction CGContextSetLineWidth (contexte, 1.0); finit par dessiner une ligne de 2 pixels de large. J'ai besoin de changer cela pour réellement dessiner un pixel de large.

Je trouve des explications, mais pas d'exemples ou méthode de modification des facteurs d'échelle pour expliquer les pommes de supporter les écrans hi res:

http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html#//apple_ref/doc/uid/TP40007072-CH10-SW12

documentation UIView donne un attribut contentScaleFactor, mais pas de méthode « set ». Changer la ligne ci-dessous de ttp: // à http: // pour transformer en URL:

ttp: //developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html #/apple_ref/occ/cl/UIView

Répondre

1

Ok, donc l'iPhone 4 est assez bon pour faire tous ses UIViews automatiquement du facteur d'échelle 2. Le plus de problème sous-jacent est que CG rend les lignes d'une manière inhabituelle (comme autant que je peux dire). Si vous faites la largeur de ligne à 1,0/contentScaleFactor (soit 0,5 pour iPhone 4), et tracer une ligne et vers le bas (ou côté droit à l'autre), la moitié du temps ce sera une ligne parfaite, lumineuse d'une largeur pixel. Mais l'autre moitié du temps, il rend cela comme une ligne de deux pixels de largeur, avec les deux lignes de pixels étant seulement à moitié allumé. Cela semble bien dans des contextes compliqués, en particulier ceux qui impliquent des mouvements, mais si vous examinez simplement une seule ligne, c'est assez ennuyeux.

Un hack pour contourner ce pour une seule ligne est de « trémousser » la coordonnée d'une demi-valeur. Donc, si vous dessinez de (0,0) à (0,10) et obtenez la ligne "double largeur", essayez de dessiner de (0.5, 0) à (0.5, 10).