具有自定义 UIActivity 的 UIActivityViewController 将彩色图像显示为灰色

Posted

技术标签:

【中文标题】具有自定义 UIActivity 的 UIActivityViewController 将彩色图像显示为灰色【英文标题】:UIActivityViewController with custom UIActivity displays color image as gray 【发布时间】:2014-01-02 20:57:47 【问题描述】:

我创建了一个自定义 UIActivity 以显示在共享表中。我创建了一个全彩色的 60x60 图标(png 文件),但是当它显示时,它只显示灰色的轮廓。我没有看到我写错了什么。我希望有人能看到我错过的东西。任何帮助将不胜感激。这是我的代码...

@implementation MyActivity

#pragma mark - Overrides
- (NSString *)activityType 
    return @"MyType";


- (NSString *)activityTitle 
    return @"ShareMe";


- (UIImage *)activityImage 
    return [UIImage imageNamed:@"MyIcon_60x60.png"];


- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems 
    return YES;


- (void)prepareWithActivityItems:(NSArray *)activityItems 
    // Do Something


+ (UIActivityCategory)activityCategory 
    return UIActivityCategoryShare;


@end

【问题讨论】:

你有没有找到任何解决方案我也面临同样的问题?任何帮助将不胜感激。 下面的答案是我唯一找到的。 【参考方案1】:

尝试在子类 UIActivity 类中的方法中添加 下划线

- (UIImage *)_activityImage 

你失去了圆形的灰色边界框

【讨论】:

是的,这完全可行——您是否尝试过通过 Apple 的审批流程?这是一个私有 API,但也许你可以偷偷摸摸... 嗨,非常感谢它对我来说工作得很好,但我不知道它是如何工作的,只是改变下划线(_)。 @BrandonA 覆盖 UIActivity 的 activityImage 方法来显示图像。按照苹果的规定,动作图像应该是灰度图像,如果它的颜色将显示为灰度图像。【参考方案2】:

我不确定这是错误还是功能,但在 ios 8 中,如果 activityCategory 是 UIActivityCategoryShare,它会显示一个漂亮的圆形颜色图标。它在 iOS 7 中显示一个灰色框。 _activityImage 对我来说是一个私有 API。

+ (UIActivityCategory)activityCategory 
    return UIActivityCategoryShare;

【讨论】:

这里有一个更详细的 sol。关于活动类别:***.com/a/19469248/1707547 这是正确的解决方案,_activityImage 可能会导致苹果拒绝?【参考方案3】:

不幸的是,这就是它应该工作的方式。 Apple Docs state:

图像的alpha通道作为掩码生成最终 呈现给用户的图像。图像中的任何颜色数据 本身被忽略...

如果您想使用全彩色图像,则必须复制 UIActivityViewController 的行为并添加对彩色图像的支持。

我建议您查看Overshare,因为它支持全彩图标。

【讨论】:

感谢您提供的信息,我阅读了那段,但那句话没有注册。可惜了颜色。除非我花很多时间重新发明***,否则我将无法显示像 YouTube 的红色图标这样的彩色图标。【参考方案4】:

在 iOS 10 中,将 UIActivity 子类的 activityCategory 类属性设置为 .share。这将导致活动图标以彩色显示在 UIActivityViewController 的顶行。

在你的 UIActivity 子类中:

class GroupMessageActivity: UIActivity

    ...

    override open class var activityCategory: UIActivityCategory
    
        get
        
            return UIActivityCategory.share;
        
    

    ...

默认值或UIActivityCategory.action 使用 alpha 通道在底部“动作”行中生成灰度图像。

【讨论】:

以上是关于具有自定义 UIActivity 的 UIActivityViewController 将彩色图像显示为灰色的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义图像的 UIActivity

带有自定义数据的自定义 UIActivity

自定义 UIActivity 的主题

如何自定义 UIActivityViewController 以仅包含自定义 UIActivity 类型?

自定义 UIActivity :图像图标反转颜色

UIActivity 自定义 activityViewController 在 iPad 上崩溃