Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么initWithPatternImage会丢失PNG的alpha值_Iphone_Objective C_Textures_Alpha_Uicolor - Fatal编程技术网

Iphone 为什么initWithPatternImage会丢失PNG的alpha值

Iphone 为什么initWithPatternImage会丢失PNG的alpha值,iphone,objective-c,textures,alpha,uicolor,Iphone,Objective C,Textures,Alpha,Uicolor,有人见过[UIColor initWithPatternImage]忽略PNG的alpha值的问题吗?如果是,最好的解决方法是什么 我使用png作为我的按钮对象数组的背景层,它包含了图像中每个像素的几个预设alpha值,用作纹理背景。它可以作为图案/纹理颜色加载,但所有关键透明区域都显示为不透明黑色 获得正确的alpha值非常重要,这样按钮图像才能正确显示。按钮帧不包括背景的alpha阴影,因为这不是按钮的“可单击”部分。此外,我的按钮对象的图像和背景图像也利用了透明度,因此它确实需要在每个按钮

有人见过[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];

不,我从来没有遇到过这个问题。我一直在应用程序中使用上述代码(虽然我经常将其与层而不是视图结合使用,但这不会影响透明度的识别),而且透明度一直工作良好

我会查看你的PNG文件。我注意到iOS有时对某些PNG选项/类型很挑剔(比如8位透明的8位PNG)。确保PNG保存为24位,透明度为8位(总共32位)


还有一个愚蠢的问题,但您是否验证了PNG背后的视图/层层次结构中没有任何黑色?有时,对于那些可能需要变通代码的人来说,这些代码中的背景模式可以在UIScrollView中显示为行,这就是(调整以消除机密性问题,如果在调用之前正确设置了变量,应该可以工作)

请注意,应该有办法多次重用UIImageView的一个分配实例,以节省内存或加载时间,但上市时间是我目前的头号驱动因素。享受旅程:)

UIImageView*选择或查看;
对于(int i=0;i
这可能与:

基本上,尝试设置:

[view setOpaque:NO];
[[view layer] setOpaque:NO];

我也有同样的问题,在UIView上设置一个透明的背景, 我就是这样解决的:

theView.backgroundColor = [UIColor clearColor];
theView.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"the_image_with_transparancy.png"]].CGColor;

嗨,杰,非常感谢你的回复。是的,我三次检查了PNG,后面的所有视图,总共是32位。由于所有内容都位于一个滚动视图中,所以最后我选择创建多个UIImageView,根据UIButton的行数垂直堆叠,这就成功了,因为它还可以轻松地使用UIButton数组滚动。相同的PNG具有与UIImageView一样的透明度。有一天如果我有时间,我会检查使用图层时的差异。干杯!:)如果重复使用完全相同的图像,为什么要为每个循环创建一个新的图像?将UIImage存储在循环外部,然后在循环中为其指定视图。我知道,这比我打这条评论省去了你一大堆电话,花的时间也比我花的少。当我把代码复制到帖子中时,我考虑了一下。先把我的头发拔出来,在最后期限前把所有的东西都弄进去。。。我很快就会把它清理干净。再次感谢Jay。这张照片在我大部分时间都很有用,但问题是它可能会反转给定的图像。一个可能的解决办法可能是:
theView.backgroundColor = [UIColor clearColor];
theView.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"the_image_with_transparancy.png"]].CGColor;