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

标签 objective-c ios xcode

我有一个 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 格式导出该按钮时,它具有白色半透明像素,必须以相同的重叠混合模式与表格背景混合​​。但是默认情况下,当我将它作为 UIImage 加载以自定义我的 accessoryview 时,导出的 PNG 在默认模式下混合。

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

it's photoshop view it's simulator view enter image description here

最佳答案

左边的图片是你在Photoshop中得到的吗?您想让它在不改变色调的情况下使背景变亮吗?如果是这样,就没有简单的方法来实现这一目标。

有两种部分解决方案:

  1. 有一个 drawRect block (或其等效的 CALayer),它使用适当的 CGBlendMode 绘制背景和光晕。
  2. 编辑图片,使底部的光晕成为当前背景的棕色阴影。

无论哪种方式,您都会失去灵 active ;拖动您的按钮或更改背景图形并将所有内容很好地融合在一起会很好。

这可能会改变。 CALayer 已经有一个名为 compositingFilter 的属性。然而,从 iOS 5.1 开始,它的行为是未定义的。如果有人在 iOS 确实有可用的合成过滤器的 future 读到这篇文章,请添加评论以说明这一点。

关于objective-c - 如何将特定混合模式添加到自定义 AccessoryView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10309289/

相关文章:

ios - CocoaLumberjack 自定义日志级别

ios - 裁剪后无法绘制阴影

swift - Tesseract 的 Mac O 链接器错误

ios - 用于删除 UICollectionViewCells 的类似跳板的动画

ios - iOS 8 中的横向模式错误 - Xcode 6

ios - Xcode 找不到我在项目中制作的 .h 文件

ios - 在图像周围画圈,比 xcode 中的图像大

objective-c - OCMock - 尽管是预期的,但调用了意外的方法

objective-c - EKEventEditViewController 添加和取消按钮没有响应

ios - 文字语法的内存管理