1

シミュレーターが UIImageViews を正しく表示するのに、iPhone では正しく表示されない理由はありますか?

私のプロセス: PNG ファイル内の画像 UIGraphicsBeginImageContext() を開始します CGrect に PNG を描画します CGRect にテキストを描画します コンテキストから UIImage を作成します UIImaveView の画像を UIImage に設定します UIImageView のフレームを次のサイズに設定しますPNG サブビューとして追加

結果: 画像が正しく表示されません。画像の右端の 1 ~ 3 ピクセルは、縦の白い線です。これはデバイスでのみ発生し、シミュレーターでは発生しません。私は問題を解決できますが、UIImageView のサイズを大きくすることによってのみです。UIImageView の size.height を 1 ピクセル増やすと、UIImage が正しく表示されます。もちろん、これらはiPhoneに画像を拡大縮小してから画面に描画させますが、これは望ましくありません。

これが発生する理由や修正方法はありますか? (必要に応じてコードを投稿します)

4

4 に答える 4

2

これが私のPNGファイルを取得し、テキストで描画し、UIImageとして保存するためのコードです。次に、この画像はUIImageViewの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);
    }
于 2009-01-27T18:02:49.437 に答える
1

とった!

SDKを打ち負かす方法は次のとおりです。

何らかの理由で、UIImageView は、UIGraphicsBeginImageContext によって生成された画像を好みません。その代わりに、クラスを標準の UIView (UIImageView ではなく) のサブクラスとして変更しました。次に drawRect メソッドを実装しました。drawRect メソッド内に、UIGraphicsBeginImageContext ブロックにあったのと同じコードを入れました。

何らかの理由で、このコードは drawRect メソッドで画像を適切にレンダリングしますが、UIGraphicsBeginImageContext ではレンダリングしません (バグの可能性があります、私かもしれません)。

コードは次のとおりです。

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

}

(また、このコードは Apple サンプルコード: theElements にあります)

于 2009-01-28T00:15:42.007 に答える
0

UIImageViewのスケーリング/サイズ変更オプションを確認しましたか?

于 2009-01-24T18:37:58.143 に答える
0

drawInRect と CGContextDrawImage の両方で同様の問題が発生しました。右端の 2 ピクセルが何らかの方法で白または反転します。解決策は、アルファ チャネルを使用しない PNG 画像を使用することでした。

于 2010-06-06T17:27:44.940 に答える