9

我的应用程序支持 iOS 7+,我使用 UIActivity 图像大小:iPhone 60pt,iPad 76pt iOS,

当触摸更多按钮重新排序项目时,它不能在列表中显示图标。

显示分享活动

在此处输入图像描述

代码如下:

class ZYShare {
class ActivityItem {
    init() {
        self.title = ""
        self.icon = ""
    }

    var title: String?
    var icon: String?
    var type: ShareType = ShareTypeAny
}

class CommonActivity: UIActivity {
    lazy var itemInfo = ActivityItem()

    override func prepareWithActivityItems(activityItems: [AnyObject]) {
        // do something

    }

    override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
        return true
    }

    override class func activityCategory() -> UIActivityCategory {
        return UIActivityCategory.Action
    }

    override func activityType() -> String? {

        return NSLocalizedString(itemInfo.title ?? "", comment: "")
    }

    override func activityTitle() -> String? {
        return NSLocalizedString(itemInfo.title ?? "", comment: "")
    }

    override func activityImage() -> UIImage? {
        println(itemInfo.icon)

        if let icon = itemInfo.icon {
            return UIImage(named: icon)
        } else {
            return nil
        }
    }

    override func performActivity() {
        ShareSDK.showShareViewWithType(itemInfo.type
            , container: nil
            , content: publishContent
            , statusBarTips: false
            , authOptions: authOptions
            , shareOptions: options
            , result: handle)

        self.activityDidFinish(true)
    }
}

class QQActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToQQ"
        self.itemInfo.title = "QQ"
        self.itemInfo.type = ShareTypeQQ
    }
}

class WeChatSessionActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToWeChat"
        self.itemInfo.title = "微信"
        self.itemInfo.type = ShareTypeWeixiSession
    }
}

class WeChatTimelineActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToWeChatTimeLine"
        self.itemInfo.title = "朋友圈"
        self.itemInfo.type = ShareTypeWeixiTimeline
    }
}

class QQSpaceActivity: CommonActivity {
    override init() {
        super.init()

        self.itemInfo.icon = "ShareToQzone"
        self.itemInfo.title = "QQ空间"
        self.itemInfo.type = ShareTypeQQSpace
    }
}
}
4

4 回答 4

6

很老的问题,但也许解决方案对其他人也有帮助!

在您的UIActivity子类中实现/覆盖该方法

- (UIImage *)activityImage {
    return [UIImage imageNamed:@"Activity Icon"];
}

返回要在 UIActivityViewController 本身中显示的图像(正如您所做的那样)。

除了这个实现/覆盖方法

- (UIImage *)activitySettingsImage {
    return [UIImage imageNamed:@"Activity Settings Icon"];
}

返回要在更多/设置视图中显示的(其他或相同)图像。

我没有在文档中找到第二种方法,但它不是 UIAction 的 '_xx' 方法,所以我猜它不是私有的......

于 2016-02-28T08:28:21.800 回答
3

UIActivity拥有无证activitySettingsImage财产。以下代码展示了如何使用 Swift 3 实现它,以便在“活动”列表中显示自定义活动的缩略图:

import UIKit

class MyActivity: UIActivity {

    override var activityType: UIActivityType? {
        return UIActivityType(rawValue: String(describing: classForCoder))
    }

    override var activityTitle: String? {
        return "My Activity Title"
    }

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

    var activitySettingsImage: UIImage? {
        return UIImage(named: "icon")
    }

    override class var activityCategory: UIActivityCategory {
        return .share
    }

    /* ... */
}

请注意,您不必重写activitySettingsImage以在代码中实现它。

于 2017-01-26T11:59:47.573 回答
3

我在 Swift 中找到了解决方案。

@objc var _activitySettingsImage: UIImage? {
    return UIImage(named: "icon")!
}

图像为 29x29 + @2x + @3x。而是activityImage,没有蒙版应用于图像。如果你想要圆角,你必须添加它们。

适用于 iOS 12 上的 Swift 5

于 2019-04-01T13:27:44.930 回答
0

我在 Swift 的项目中遇到了同样的问题。我尝试使用@imanou-petit 答案,但没有成功修复图标错误。但是,然后我尝试在 Objective-c 中编写我的 UIActivity 子类(尽管我的项目是在 Swift 中),使用 activitySettingsImage 方法,就像@laboretars 写的那样,它奏效了!这很奇怪,但它奏效了。

于 2019-03-11T11:06:45.340 回答