UIImage in UIActivityViewController mit Preview-Icon

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • UIImage in UIActivityViewController mit Preview-Icon

    Moin!

    Nerven Euch meine "Ich-habe-wieder-etwas-hinbekommen"-Posts? Dann sagt ruhig Bescheid: Ich genieße einfach, eine App nach eigenem Gusto mit neustem SDK / Deployment-Target erstellen zu können :)

    Diesmal geht es um eine Kleinigkeit beim Teilen eines UIImages: Ich binde (natürlich) den Teilen-Dialog über einen UIActivityViewController ein, dem ich ursprünglich einfach ein UIImage als activityItem übergab. Was mich verwunderte und nervte, war ein fehlendes Preview-Icon im Kopf des Teilen-Dialogs: Ich kann noch immer nicht vestehen, warum dieses bei Images nicht standardmäßig angezeigt wird.

    Beheben lässt sich dies, indem man ein eigenes Objekt erstellt, welches dem Protokoll <UIActivityItemSource> genügt. So weit, so gut (und wahrscheinlich bekannt), aber hier gibt es ab iOS 13 eine neue Methode activityViewControllerLinkMetadata:, in welcher man z. B. ein Preview-Image setzen kann (Photo ist hier ein NSManagedObject):

    Quellcode: STSSharePhoto.m

    1. @interface STSSharePhoto ()
    2. @property (strong, nonatomic) Photo *photo;
    3. @end
    4. @implementation STSSharePhoto
    5. - (id)initWithPhoto:(Photo *)photo
    6. {
    7. if (self = [super init])
    8. {
    9. self.photo = photo;
    10. }
    11. return self;
    12. }
    13. - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
    14. {
    15. // Only the returned object's class is important; using a dummy UIImage
    16. return [UIImage systemImageNamed:@"photo"];
    17. }
    18. - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
    19. {
    20. UIImage *image = [UIImage imageWithData:self.photo.image];
    21. return image;
    22. }
    23. - (LPLinkMetadata *)activityViewControllerLinkMetadata:(UIActivityViewController *)activityViewController
    24. {
    25. // Provide an icon image in the shared items metadata; as UIImage conforms to <NSItemProviderWriting> it can directly being assigned <https://stackoverflow.com/questions/57850483/ios13-share-sheet-how-to-set-preview-thumbnail-when-sharing-uiimage>
    26. UIImage *thumbnail = [UIImage imageWithData:self.photo.thumbnail];
    27. NSItemProvider *imageProvider = [[NSItemProvider alloc] initWithObject:thumbnail];
    28. LPLinkMetadata *metaData = [[LPLinkMetadata alloc] init];
    29. metaData.title = (self.photo.article.title.length > 0) ? [NSString stringWithFormat:@"%@ - %@", self.photo.article.articleID, self.photo.article.title] : self.photo.article.articleID;
    30. metaData.imageProvider = imageProvider;
    31. return metaData;
    32. }
    33. @end
    Alles anzeigen
    Das Ganze ist nicht auf meinem Mist gewachsen, den entscheidenen Hinweis habe ich auf SO gefunden...

    Schönes Wochenende, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.