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

时间:2014-01-02 20:57:47

标签: iphone image ios7 uiactivityviewcontroller uiactivity

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

4 个答案:

答案 0 :(得分:33)

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

- (UIImage *)_activityImage {}

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

答案 1 :(得分:7)

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

+ (UIActivityCategory)activityCategory {
    return UIActivityCategoryShare;
}

答案 2 :(得分:3)

不幸的是,这是它的工作方式。 Apple Docs state

  

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

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

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

答案 3 :(得分:0)

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

在您的UIActivity子类中:

class GroupMessageActivity: UIActivity
{
    ...

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

    ...
}

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