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 的图像属性,其框架是图像的大小 (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 的方法。

由于某种原因,A 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 个像素以某种方式变为白色或反转。解决方案是使用不使用 alpha 通道的 PNG 图像。

于 2010-06-06T17:27:44.940 回答