Frage

Gibt es irgendwelche Gründe, warum der Simulator UIImageViews richtig angezeigt wird, aber nicht korrekt auf dem iPhone?

Mein Prozess: Ein Bild in einer PNG-Datei Starten Sie eine UIGraphicsBeginImageContext () Zeichnen Sie die PNG in einem CGRect Zeichnen Sie Text in der CGRect Erstellen Sie eine UIImage aus dem Kontext Stellen Sie das Bild eines UIImaveView zum UIImage Stellen Sie den Rahmen der UIImageView auf die Größe des PNG Fügen Sie als Subview

Ergebnis: Das Bild wird nicht richtig angezeigt. Die am weitesten rechts liegenden 1-3 Pixel des Bildes ist nur eine vertikale weiße Linie. Dies geschieht nur auf dem Gerät und nicht auf dem Simulator. Ich kann das Problem beheben, sondern nur durch die Größe des UIImageView zu erhöhen. Wenn ich die Size.height des UIImageView um 1 Pixel erhöhen, zeigt es die UIImage richtig. Natürlich ist diese das iPhone läßt mein Bild skalieren, bevor es auf dem Bildschirm zeichnen, was nicht erwünscht ist.

Irgendwelche Ideen, warum dies der Fall ist oder keine Korrekturen für das? (Ich werde meinen Code schreiben, wenn erforderlich)

War es hilfreich?

Lösung 2

Verstanden!

Hier ist, wie ich schlage das SDK.

Aus irgendeinem Grunde ein UIImageView nicht wie das Bild von der UIGraphicsBeginImageContext erzeugt. Anstatt also änderte ich meine Klasse als Unterklasse einer Standard UIView (nicht UIImageView). Dann implementiert ich die drawRect Methode. Im Innern der drawRect Methode, habe ich den gleichen Code, den ich in dem UIGraphicsBeginImageContext Block hatte.

Aus irgendeinem Grunde macht dieser Code das Bild richtig in der drawRect Methode, aber nicht in der UIGraphicsBeginImageContext (kann ein Fehler sein, kann ich sein).

Der Code folgt.

- (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];

}

(Auch dieser Code kann im Apple-Beispielcode gefunden werden: theElements)

Andere Tipps

Hier ist der Code meine PNG-Datei zu nehmen, es mit Text ziehen und als UIImage zu speichern. Dieses Bild wird dann auf die Bildeigenschaft eines UIImageView, dessen Rahmen die Größe des Bildes (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);
    }

Haben Sie die Skalierung geprüft / die Größe Optionen für die UIImageView?

Ich hatte ein ähnliches Problem mit den beiden drawInRect und CGContextDrawImage, ganz rechts 2 Pixel werden weiß oder in irgendeiner Weise invertiert. Lösung war PNG-Bilder zu verwenden, die nicht den Alphakanal verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top