UIActivityViewController与自定义UIActivity一起使用时,将彩色图像显示为灰色

11

我创建了一个自定义的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

你找到任何解决方案了吗?我也遇到了同样的问题。非常感谢任何帮助。 - Rajat
下面的答案是我找到的唯一东西。 - Rob
4个回答

33

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

- (UIImage *)_activityImage {}

不过,您会失去圆角灰色边框。


15
没错,这很有效 - 你尝试通过苹果的批准流程了吗?虽然这是私有API,但也许你可以偷偷摸摸地安排一下... - tomwilson
嗨,非常感谢你,它对我很有效,但我不知道它是如何工作的,只是改变了下划线(_)。 - Vinayak
@BrandonA 重写 UIActivity 的 activityImage 方法以显示图像。根据苹果的规定,如果操作图像是彩色的,则会显示为灰度图像。 - Surjeet Rajput

7

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

+ (UIActivityCategory)activityCategory {
    return UIActivityCategoryShare;
}

这里有一个更详细的关于activityCategory的解决方案:https://dev59.com/oWIk5IYBdhLWcg3wN71j#19469248 - jayellos
这是正确的解决方案,_activityImage可能会导致苹果拒绝? - Kappe

3
很不幸,这就是它应该工作的方式。 Apple文档中指出:
坐标图像的alpha通道被用作蒙版来生成呈现给用户的最终图像。图像本身的任何颜色数据都会被忽略......
如果你想使用全彩色图像,你需要复制UIActivityViewController的行为并且添加支持彩色图像。
我建议你看一下Overshare,因为它支持全彩色图标。

谢谢你提供的信息,我已经阅读了那段话,但是那句话没有留下什么印象。颜色的问题真是遗憾。除非我愿意花费大量时间重新发明轮子,否则我将无法像YouTube的红色图标一样显示带颜色的图标。 - Rob

0
在 iOS 10 中,将 UIActivity 的子类的 activityCategory 类属性设置为 .share。这将导致活动图标以彩色出现在 UIActivityViewController 的顶行。
在您的 UIActivity 子类中:
class GroupMessageActivity: UIActivity
{
    ...

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

    ...
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接