有没有理由为什么模拟器会正确显示UIImageViews,但在iPhone上显示不正确?
我的流程: PNG文件中的图像 启动UIGraphicsBeginImageContext() 在CGrect中绘制PNG 在CGRect中绘制文本 从上下文创建UIImage 将UIImaveView的图像设置为UIImage 将UIImageView的框架设置为PNG的大小 添加为子视图
结果: 图像无法正确显示。最右边1-3个像素的图像只是一条垂直的白线。这仅在设备上发生,而不在模拟器上发生。我可以解决这个问题,但只能增加UIImageView的大小。如果我将UIImageView的size.height增加1个像素,它会正确显示UIImage。当然,这些会让iPhone在将图像绘制到屏幕上之前对其进行缩放,这是不可取的。
为什么会出现这种情况或对其进行修复的任何想法? (如果需要,我会发布我的代码)
答案 0 :(得分: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);
}
答案 1 :(得分:1)
得到了它!
以下是我击败SDK的方法。
由于某种原因,A UIImageView不喜欢UIGraphicsBeginImageContext生成的图像。所以相反,我改变了我的类作为标准UIView(而不是UIImageView)的子类。然后我实现了drawRect方法。在drawRect方法中,我将相同的代码放在UIGraphicsBeginImageContext块中。
由于某种原因,此代码在drawRect方法中正确呈现图像,但在UIGraphicsBeginImageContext中没有(可能是一个bug,可能是我)。
代码如下。
- (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中找到)
答案 2 :(得分:0)
您是否检查过UIImageView的缩放/调整大小选项?
答案 3 :(得分:0)
我对drawInRect和CGContextDrawImage都有类似的问题,最右边2个像素变成白色或以某种方式反转。解决方案是使用不使用alpha通道的PNG图像。