为什么Swift自定义UIActivity图标图像不显示,而Objective-C正确显示?

时间:2017-10-11 14:04:03

标签: ios objective-c swift

这个问题与an existing one有关,但我不明白执行的差异。

Myproject开发环境是XCode 8.3,Swift 3和Bridging Objc,iOS 9.0 upper。

我想在第二行显示活动图像。

当UIActivity的类别是Swift中的操作时,活动图标就会出现问题。

案例1。 Swift CustomActivity,类别类型是动作。

这不是显示图像。

override class var activityCategory: UIActivityCategory {
    return .action
}

override var activityImage: UIImage? {
    return UIImage(named: "ic_facebook")
}

情况2。 Swift CustomActivity,类别类型是共享。

这是显示图像。

override class var activityCategory: UIActivityCategory {
    return .share
}

override var activityImage: UIImage? {
    return UIImage(named: "ic_facebook")
}

情形3。 Objective-C CustomActivity

在Objc中,覆盖实例变量是正确的执行。

+ (UIActivityCategory) activityCategory
{
    return UIActivityCategoryAction;
}

- (UIImage *) _activityImage
{
    return [UIImage imageNamed:@"ic_facebook"];
}

Simulator Images by case

我不明白,为什么Objective-C实例参数执行正确?

在Swift中,这是不可靠的工具吗?

有什么区别?

1 个答案:

答案 0 :(得分:1)

来自UIActivity activityImage的文档:

  

图像的Alpha通道用作蒙版,以生成呈现给用户的最终图像。图像本身中的任何颜色数据都将被忽略。不透明像素具有应用于它们的渐变,然后将此渐变放置在标准背景之上。因此,完全不透明的图像会产生渐变填充矩形。

本文档中缺少的是,这仅适用于activityCategory设置为UIActivityCategoryAction.action)的情况。它曾经适用于UIActivityCategoryShared.shared),直到它在早期版本的iOS中发生变化(我认为它在iOS 8中已更改)。

这就是为什么你的第一组Swift代码看起来不起作用的原因。你得到灰色矩形,因为你需要一个.action类型的图像掩码。

您的Objective-C代码很奇怪。为什么要实施- (UIImage *) _activityImage而不是- (UIImage *)activityImage?为什么是下划线?