質問

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

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

結果: 画像が正しく表示されません。画像の右から1〜3ピクセルは、垂直の白い線です。これはデバイスでのみ発生し、シミュレータでは発生しません。この問題は修正できますが、UIImageViewのサイズを大きくするだけです。 UIImageViewのsize.heightを1ピクセル増やすと、UIImageが正しく表示されます。もちろん、これらは画面に描画する前に画像をスケーリングするためにiPhoneを残します。これは望ましくありません。

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

役に立ちましたか?

解決 2

Got IT!

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にあります)

他のヒント

ここに、PNGファイルを取得してテキストで描画し、UIImageとして保存するコードを示します。この画像は、UIImageViewの画像プロパティに設定され、そのフレームは画像のサイズ(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);
    }

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top