Question

Existe-t-il des raisons pour lesquelles le simulateur affichera UIImageViews correctement, mais de manière incorrecte sur l'iPhone?

Mon processus: Une image dans un fichier PNG Démarrer un UIGraphicsBeginImageContext () Dessine le PNG dans un CGrect Dessiner du texte dans le CGRect Créer un UIImage à partir du contexte Définir l'image d'un UIImaveView sur UIImage Définissez le cadre de UIImageView à la taille du PNG Ajouter en tant que sous-vue

Résultat: L'image ne s'affiche pas correctement. Les 1 à 3 pixels les plus à droite de l'image sont simplement une ligne blanche verticale. Cela se produit uniquement sur le périphérique et non sur le simulateur. Je peux résoudre le problème, mais uniquement en augmentant la taille de UIImageView. Si j'augmente la taille.hauteur de UIImageView de 1 pixel, il affiche correctement UIImage. Bien sûr, ils laissent l’iPhone redimensionner mon image avant de la dessiner à l’écran, ce qui n’est pas souhaitable.

Des idées pour lesquelles cela se produit-il ou des solutions? (Je posterai mon code si nécessaire)

Était-ce utile?

La solution 2

Vous l'avez!

Voici comment j'ai vaincu le SDK.

Pour une raison quelconque, UIImageView n’aime pas l’image produite par UIGraphicsBeginImageContext. Donc, au lieu de cela, j'ai changé ma classe en tant que sous-classe d'un UIView standard (pas UIImageView). Ensuite, j'ai implémenté la méthode drawRect. Dans la méthode drawRect, j'ai mis le même code que celui que j'avais dans le bloc UIGraphicsBeginImageContext.

Pour une raison quelconque, ce code rend l'image correctement dans la méthode drawRect, mais pas dans UIGraphicsBeginImageContext (peut-être un bogue, peut-être moi).

Le code suit.

- (void)drawRect:(CGRect)rect {


    UIImage *backgroundImage = [UIImage imageNamed:imageFile];
    CGRect elementSymbolRectangle = CGRectMake(0.0f ,0.0f, backgroundImage.size.width, backgroundImage.size.height);
    [backgroundImage drawInRect:elementSymbolRectangle];

    // draw the element name
    [[UIColor whiteColor] set];

    // draw the element number
    UIFont *font = [UIFont boldSystemFontOfSize:(smallFontSize)];
    CGPoint point = CGPointMake(2,1);
    [self.atomicNumber drawAtPoint:point withFont:font];

    // draw the element symbol

    font = [UIFont boldSystemFontOfSize:largeFontSize];
    CGSize stringSize = [self.symbol sizeWithFont:font];
    point = CGPointMake((elementSymbolRectangle.size.width-stringSize.width)/2,self.frame.size.height-(largeFontSize)-(largeFontSize/10));
    [self.symbol drawAtPoint:point withFont:font];

}

(Ce code peut également être trouvé dans le code d'échantillon Apple: theElements)

Autres conseils

Voici le code pour récupérer mon fichier PNG, le dessiner avec du texte et l’enregistrer en tant que UIImage. Cette image est ensuite définie sur la propriété image d'un UIImageView, dont le cadre correspond à la taille de l'image (25x25).

-(UIImage *) elementImageWithFrame: (CGRect) aFrame image: (NSString *) anImage{


        int smallFontSize=FONT_SMALL;
        int largeFontSize=FONT_LARGE;

        CGSize mySize = aFrame.size;

        UIGraphicsBeginImageContext(mySize);

        UIImage *backgroundImage = [UIImage imageNamed:anImage];
        CGRect elementSymbolRectangle = CGRectMake(0.0f ,0.0f, aFrame.size.width, aFrame.size.height);
        [backgroundImage drawInRect:elementSymbolRectangle];

        // draw the element name
        [[UIColor whiteColor] set];

        // draw the element number
        UIFont *font = [UIFont boldSystemFontOfSize:(smallFontSize)];
        CGPoint point = CGPointMake(2,1);
        [self.atomicNumber drawAtPoint:point withFont:font];

        // draw the element symbol

        font = [UIFont boldSystemFontOfSize:largeFontSize];
        CGSize stringSize = [self.symbol sizeWithFont:font];
        point = CGPointMake((elementSymbolRectangle.size.width-stringSize.width)/2,aFrame.size.height-(largeFontSize)-(largeFontSize/10));
        [self.symbol drawAtPoint:point withFont:font];

        //get image


        UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();

            UIGraphicsEndImageContext();

            return (theImage);
    }

Avez-vous vérifié les options de redimensionnement / redimensionnement de UIImageView?

J'ai eu un problème similaire avec drawInRect et CGContextDrawImage: les deux pixels les plus à droite deviennent blancs ou inversés d'une manière ou d'une autre. La solution consistait à utiliser des images PNG qui n'utilisaient pas le canal alpha.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top