2010-09-11 5 views
1

Je suis en train de définir la taille d'un UIImageView par programme:définir la taille de UIImageView dans une cellule UITableView par programme - quelle est l'origine?

[thisImageView setFrame:CGRectMake(x, y, image.size.width, image.size.height)]; 

J'ai essayé avec x = 0, y = 0, mais le UIImageView disparait.

Plus d'informations sur pourquoi j'essaye de faire ceci. J'essaie d'afficher une image haute résolution sur un iPhone 4 sans utiliser le SDK iOS 4 (uniquement en utilisant les appels API 3.2 SDK). J'ai des appels pour voir si je suis sur un iPhone 4, donc j'essaye de doubler la taille de mon UIImageView de sorte que quand je mets le UIImage à haute résolution dedans, il ne sera pas granuleux.

+0

P.S. Est-ce que doubler la taille de mon UIImageView atteindra même ce que j'essaye de faire? – Mark

Répondre

2

Vous ne savez pas ce qu'il y a de si spécial sur iOS. Utilisez simplement la même méthode que vous utilisez avec 3.2: imageNamed: ... il prendra soin de tout tant que vos images sont nommées correctement (yourimagename.png et [email protected]). Rien d'extraordinaire dans le SDK iOS 4 ici, donnez juste la taille que vous utilisez dans les points comme avant. Si cela ne vous convient pas, pouvez-vous expliquer pourquoi?

+0

Oui Eiko. Le problème ici est que je récupère l'image d'un serveur Web pour que je puisse changer dynamiquement l'image. L'image que j'envoie est à la résolution que je veux afficher sur l'iPhone 4 (par exemple, mon UIImageView dans IB est de 100 sur 100 pixels et j'envoie une image de 200 sur 200 pixels). J'ai essayé d'envoyer l'image avec le suffixe @ 2x, mais cela n'a pas aidé. Serait une solution d'envoyer deux versions de l'image, les stocker localement et ensuite le charger? – Mark

+0

Hmm ... "peut-être". Le téléchargement de l'image, son enregistrement et l'utilisation d'imageNamed: devraient fonctionner (n'utilisez pas l'extension @ 2x dans cette méthode, juste le nom brut). Vous devriez également pouvoir régler le * facteur d'échelle * de l'image manuellement. – Eiko

+0

La définition manuelle de la balance est une fonction 4.0 SDK. :/ – Mark

1

Je pense que votre approche est erronée. L'iPhone 4 fonctionne avec des points au lieu de pixels, ce qui rend le doublage de la taille gênant. 1 point sur les anciens appareils équivaut à 4 pixels sur l'iPhone 4, mais est toujours utilisé comme 1 point. Lorsque vous créez le cadre, vous ne donnez pas à l'API les dimensions en pixels, mais les dimensions en points.

+0

Donc, est-il impossible de le faire sans utiliser le SDK 4.0? – Mark

+0

Excepté un iPhone "point" est beaucoup plus petit que le point standard (PostScript) de 1/72 pouces. Alors que Apple peut l'appeler un "point", c'est un nom * terrible *. –

2

Je suis en train d'afficher une image haute résolution sur un iPhone 4 sans utiliser le SDK iOS 4 (uniquement en utilisant 3.2 appels API SDK)

Aïe. Ne fais pas ça.

Compilez contre 4.0, définissez la cible de déploiement sur 3. quoi que ce soit.

Lors de la création de l'image, vérifiez [UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)]. Si c'est le cas, vous pouvez utiliser +[UIImage imageWithCGImage:scale:orientation:] pour créer une image «échelle 2», qui s'affichera correctement dans un UIImageView sur iPhone 4 (qui a un écran «échelle 2»).

Si vous ne pouvez vraiment pas utiliser le SD 4 OS 4 (vous ne semblez pas indiquer pourquoi), réduisez UIImageView en utilisant le mode de contenu approprié (AspectFit/AspectFill/ScaleToFill) et définissez son cadre pour la moitié de la taille en pixels (par exemple, si l'image est 100x100 px, définissez-la sur (CGSize) {50,50}). Cela réduit l'image à demi-taille, mais l'écran à double résolution signifie que vous le voyez pixel par pixel.

+0

Si j'utilise le SDK 4.0, il active le fond d'écran qui casse certaines fonctionnalités de mon application. Je dois donc construire et utiliser le SDK 3.2 pour l'instant. Pouvez-vous me donner un exemple de votre méthode pour ne pas utiliser le SDK OS 4? Merci! – Mark

+0

Si l'arrière-plan de l'application est la seule chose que vous ne voulez pas dans la version 4.0, il suffit de définir ' UIApplicationExitsOnSuspend' dans Info.plist. –

+0

Merci tc - ça a l'air intéressant. Serait-il acceptable que vous éditiez votre message et que vous me montriez un exemple de votre solution SDK non-4.0? Est-ce que je fais tout ce que vous spécifiez si je cours sur un iPhone 4? Quel UIImageView est-ce que je change? Celui en IB ou par programme quand je vérifie pour voir si je cours sur un iPhone 4? – Mark

Questions connexes