我正在尝试使用stretchableImageWithLeftCapWidth调整图像大小:它可以在模拟器上运行,但在设备上会出现垂直绿条。
我尝试过使用imageNamed,imageWithContentOfFile和imageWithData来加载图像,它不会改变。
UIImage *bottomImage = [[UIImage imageWithData:
[NSData dataWithContentsOfFile:
[NSString stringWithFormat:@"%@/bottom_part.png",
[[NSBundle mainBundle] resourcePath]]]]
stretchableImageWithLeftCapWidth:27 topCapHeight:9];
UIImageView *bottomView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 200+73, 100, 73)];
[self.view addSubview:bottomView];
UIGraphicsBeginImageContext(CGSizeMake(100, 73));
[bottomImage drawInRect:CGRectMake(0, 0, 100, 73)];
UIImage *bottomResizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
bottomView.image = bottomResizedImage;
查看结果:绿色条不应该出现在模拟器上。
alt text http://www.quicksnapper.com/files/5161/96232162149F1C14751048_m.png
答案 0 :(得分:12)
你有没有想到这个?
似乎它可能是UIGraphicsGetImageFromCurrentImageContext的错误。如果我绘制一个具有透明度的图像,我会得到红色/绿色的文物。这些只出现在设备上(不在SIM卡中)。此外,如果我从图像中删除透明度,工件就会消失。
更新:更奇怪一些。我之前使用的是PNG,所以我尝试使用透明的gif代替。使用GIF,在SIM卡上显示工件问题。
<强>胜利!找到了解决方案:
在项目的构建设置中关闭“压缩PNG文件”。禁用此选项可使PNG透明度无任何工件。
答案 1 :(得分:5)
看起来你正在写很多不必要的代码,但也许这只是因为它脱离了上下文而且还有更多我不知道的。
获取图片:
[[UIImage imageName: @"bottom_part.png"] stretchableImageWithLeftCapWidth: 27 topCapHeight: 9];
您显示此图片的代码部分是什么?即你用什么方法调用上面的图像?
为什么不使用UIImageView并将图像放在那里?然后你不需要做任何图像上下文绘图等。
答案 2 :(得分:1)
在我的情况下,我有一个水平伸展的UIImageView。我在拉伸的图像中发现了一条奇怪的垂直白线。
上述解决方案对我不起作用。但是,以下做了:
将宽度值转换为int值:
myNewViewFrame.size.width = (int)newWidth;
myView.frame = myNewViewFrame;
希望它对你们有用......
答案 3 :(得分:0)
我昨晚花了5个小时进行调试,在xcode中禁用PNG压缩对我没有任何作用。
对于其他任何使用stretchableImageWithLeftCapWidth(在UIImage API中)遇到垂直,绿色,条形/线条/工件的人 - 这篇文章适合你。
我有一个21x30的自定义按钮背景,我想要加宽,但得到与OP相同的绿色条纹。我找到了一个用photoshop创建的PNG,效果很好 - 我的是用Gimp制作的。 无论如何,从文件中剥离所有块(除了三个必不可少的块)都没有区别。也没有禁用PNG压缩。
对我有用的是:
这会让问题消失(对我而言)。
我认为错误/问题与绘制时垂直缩放而不是有关,因此我强制缩放第一个源图像行(分为两行),这是在我的构图之外绘制的。
我希望这可以帮助别人节省5个小时。
/ Krisb
答案 4 :(得分:0)
我停止使用stretchableImageWithLeftCapWidth来支持UIView更加良好的contentStretch属性。我从未见过你描述的绿色条形图,但总的来说我建议使用contentStretch而不是stretchableImageWithLeftCapWidth。
答案 5 :(得分:0)
我试图像Nate提议的那样禁用PNG压缩,但这对我不起作用(iOS 3.1.3)。然后我尝试使用TIFF图像而不是PNG,它可以工作。
答案 6 :(得分:0)
当使用值(0.5,0.5,0,0)时,我发现contentStretch(在任何已绘制内容的UIView上)存在类似问题。即在中心像素上拉伸。
我发现只有iphone 3G(可能是2G)才会出现这个问题。 iphone 4和3GS还可以。所以,我认为这是旧图形硬件的一个问题。
我发现问题的一个方法是在稍大的中心区域伸展。
e.g。 (0.4,0.4,0.1,0.1)