Подтвердить что ты не робот

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
4b9b3361

Ответ 1

Попробуйте добавить подчеркивание к методу в классе подкласса UIActivity

- (UIImage *)_activityImage {}

Вы теряете закругленный серый ограничивающий прямоугольник, хотя

Ответ 2

Я не уверен, что это ошибка или функция, но в iOS 8, если activityCategory UIActivityCategoryShare, она показывает красивую иконку с закругленным цветом. Он показывает серый ящик в iOS 7. _activityImage выглядит для меня частным API.

+ (UIActivityCategory)activityCategory {
    return UIActivityCategoryShare;
}

Ответ 3

К сожалению, так оно и должно работать. Состояние Apple Docs:

Альфа-канал изображения используется в качестве маски для создания окончательного изображение, которое предоставляется пользователю. Любые данные цвета на изображении сам игнорируется...

Если вы хотите использовать полноцветное изображение, вам придется реплицировать поведение UIActivityViewController и добавить поддержку цветных изображений.

Я рекомендую вам посмотреть Overshare, поскольку он поддерживает полноцветные значки.

Ответ 4

В iOS 10 задайте свойство класса activityCategory вашего подкласса UIActivity для .share. Это приведет к тому, что значок активности появится в цвете в верхней строке UIActivityViewController.

В подклассе UIActivity:

class GroupMessageActivity: UIActivity
{
    ...

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

    ...
}

Значение по умолчанию или UIActivityCategory.action использует альфа-канал для создания полутонового изображения в нижней строке действия.