有没有人见过[UIColor initWithPatternImage]忽略PNG alpha值的问题?如果是这样,最好的解决办法是什么?
我使用png作为我的按钮对象数组的背景图层,它包含图像中每个像素的几个预设alpha值,用作纹理背景。它作为图案/纹理颜色加载很好,但它所有的关键透明区域都是不透明的黑色。
重要的是我获得正确的alpha值,以便正确显示按钮图像。按钮框架不包括背景的alpha阴影,因为它不是按钮的“可点击”部分。此外,我的按钮对象的图像和背景图像也使用透明度,因此它需要在每个按钮后面都有一个清晰的背景,以便让正确的当前颜色设置正确(最低层UIView将其背景颜色设置为当前用户选择的颜色)。仅为包含此纹理的UIView图层设置单个alpha值也不能满足我的需要。
任何帮助将不胜感激。我目前的解决方法是使用png对多个UIImageView进行全面,重复编程的布局,而不是使用带有图案填充的单个UIView。
这是一段代码,但将UIImage转换为UIColor用作图案/纹理颜色非常标准:
UIView *selectorView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,320)];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"SelectorViewBackground.png"]];
selectorView.backgroundColor = background;
[mainView addSubview:selectorView]; // pattern background layer. Add UIButtons on top of this selectorView layer
[self addSubview:mainView]; // current user selected color set in mainView.
[selectorView release];
[background release];
答案 0 :(得分:3)
我在UIView上设置背景时遇到了同样的问题,有些透明, 这就是我解决它的方法:
theView.backgroundColor = [UIColor clearColor];
theView.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"the_image_with_transparancy.png"]].CGColor;
答案 1 :(得分:1)
这可能与:
有关Tiled Background Image: Can I do that easily with UIImageView?
基本上,请尝试设置:
[view setOpaque:NO];
[[view layer] setOpaque:NO];
答案 2 :(得分:0)
不,我从来没有遇到过这个问题。我一直使用上面的代码来代替应用程序(虽然我经常将它与图层结合使用而不是视图,但这不应该对透明度的识别产生影响)并始终保持透明度正常。
我会查看您的PNG文件。我注意到iOS有时对某些PNG选项/类型(如8位PNG,8位透明度)很挑剔。确保您的PNG保存为24位,8位透明度(总共32位)。
另外,这是一个愚蠢的问题,但你确认你的PNG背后的视图/图层层次结构中没有任何黑色吗?有时这是愚蠢的事情
答案 3 :(得分:0)
对于那些可能需要处理代码的人来说,背景模式可以在UIScrollView中作为行布局,这里(调整以消除机密性问题,如果变量在调用之前正确设置,则应该有效)。
请注意,应该有多种方法可以多次重用UIImageView的一个分配实例,以节省内存或加载时间,但是上市时间是我现在的头号驱动程序。享受旅程:))
UIImageView *selectorView;
for (int i = 0; i < numRows; ++i) {
selectorView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectorViewBackground.png"]];
selectorView.frame = CGRectMake(0, i * patternHeight, patternWidth, patternHeight);
[mainView addSubview:selectorView];
[selectorView release];
}