Objective c 如何将特定混合模式添加到自定义AccessoryView

Objective c 如何将特定混合模式添加到自定义AccessoryView,objective-c,ios,xcode,Objective C,Ios,Xcode,我有一个tableview,我希望自定义accessoryview按钮。 为此,我有一个半透明像素的自定义PNG图像 UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)]; [myAccessoryButton setUserInteractionEnabled:YES]; [myAccessoryButton setBackgroundColor:[UIColor cle

我有一个tableview,我希望自定义accessoryview按钮。 为此,我有一个半透明像素的自定义PNG图像

UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
[myAccessoryButton setUserInteractionEnabled:YES];

[myAccessoryButton setBackgroundColor:[UIColor clearColor]];

[myAccessoryButton setImage:[UIImage imageNamed:@"accessory_btn"] forState:UIControlStateNormal];
[myAccessoryButton addTarget: self
                      action: @selector(accessoryButtonTapped:withEvent:)
            forControlEvents: UIControlEventTouchUpInside];

[cell setAccessoryView:myAccessoryButton];
这对我来说很好,除了一个问题。在我的模板(PSD)中,该按钮具有混合模式-重叠,当我从PSD格式导出该按钮时,它具有白色半透明像素,必须以相同的重叠混合模式与表格背景混合。但默认情况下,当我将导出的PNG作为UIImage加载以自定义我的accessoryview时,它会以默认模式混合

如何更改UIImage或UIButton或AccessoryView的混合模式


左边的图片是你在Photoshop中看到的吗?您希望它在不改变色调的情况下使背景变亮吗?如果是这样的话,要做到这一点是不容易的

有两种局部解决方案:

  • 使用一个
    drawRect
    块(或其
    CALayer
    等效块)绘制背景,并使用相应的
    CGBlendMode
    绘制辉光
  • 编辑图片,使底部的光晕为当前背景的棕色阴影
  • 不管怎样,你都会失去灵活性;这将是很好的拖动您的按钮或改变背景图形,并有一切融合在一起很好


    这可能会改变
    CALayer
    已经有一个名为
    compositingFilter
    的属性。但是,从iOS 5.1开始,其行为尚未定义。如果将来有人读到这篇文章时,iOS确实有可以使用的合成过滤器,请添加评论。左边的图片是你在Photoshop中看到的吗?您希望它在不改变色调的情况下使背景变亮吗?如果是这样的话,要做到这一点是不容易的

    有两种局部解决方案:

  • 使用一个
    drawRect
    块(或其
    CALayer
    等效块)绘制背景,并使用相应的
    CGBlendMode
    绘制辉光
  • 编辑图片,使底部的光晕为当前背景的棕色阴影
  • 不管怎样,你都会失去灵活性;这将是很好的拖动您的按钮或改变背景图形,并有一切融合在一起很好


    这可能会改变
    CALayer
    已经有一个名为
    compositingFilter
    的属性。但是,从iOS 5.1开始,其行为尚未定义。如果将来有人读到这篇文章,而iOS确实有可以使用的合成过滤器,请添加一条评论。

    是否可以发布图片-Photoshop显示您希望它的外观,以及从应用程序显示它当前的外观?也就是说,您可能无法仅通过更改视图设置来完成所需的操作。如果使用
    CGBlendMode
    手动绘制,则可以访问许多有用的合成效果。因此,您可以创建一个
    UIView
    子类,然后在其
    drawRect
    方法中绘制一部分表格背景,然后使用所需的混合模式在顶部绘制图像。跳过背景绘制步骤是很好的,但你可能无法做到。@dondragmer谢谢你的回复。我在主主题中附上样本。看来你是对的,做我想做的唯一方法就是按照你的建议去做:(可以发布图片吗?Photoshop显示您希望它的外观,应用程序显示它当前的外观?也就是说,您可能无法通过更改视图设置来完成您想要的操作。如果您使用
    cBlendMode
    手动绘制,您可以访问许多有用的合成效果。因此,您可以创建
    UIVi。)ew
    子类,然后在其
    drawRect
    方法中绘制一部分表格背景,然后使用所需的混合模式在顶部绘制图像。跳过背景绘制步骤很好,但您可能无法完成。感谢您的回复。@dondragmer。我在主主题中附上了示例。看起来您是正确的,也是唯一的方法我想按照你的建议做:(Thanx.是的-左边是photoshop图片,右边是模拟器。第二种变体最简单,但如果我这么做的话,它看起来不是必须的(将半透明的白色变成半透明的棕色)然而,这是最简单的方法,几乎可以实现我想要的。结果非常接近。为了获得我想要的效果,我下一步将重叠混合模式更改为默认模式。在该区域将颜色从白色更改为红棕色并添加一些噪声后。现在它看起来非常接近模拟器中的原始图像(第3张图片)Thanx.是的-左边是photoshop图片,右边是模拟器。第二个版本最简单,但如果我这样做的话,它看起来不是必须的(将半透明白色改为半透明棕色)然而,这是最简单的方法,几乎可以实现我想要的。结果非常接近。为了获得我想要的效果,我下一步将重叠混合模式更改为默认模式。在该区域将颜色从白色更改为红棕色并添加一些噪声后。现在它看起来非常接近模拟器中的原始图像(第3张图片)