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):
Alles anzeigen
Das Ganze ist nicht auf meinem Mist gewachsen, den entscheidenen Hinweis habe ich auf SO gefunden...
Schönes Wochenende, Mattes
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
- @interface STSSharePhoto ()
- @property (strong, nonatomic) Photo *photo;
- @end
- @implementation STSSharePhoto
- - (id)initWithPhoto:(Photo *)photo
- {
- if (self = [super init])
- {
- self.photo = photo;
- }
- return self;
- }
- - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
- {
- // Only the returned object's class is important; using a dummy UIImage
- return [UIImage systemImageNamed:@"photo"];
- }
- - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
- {
- UIImage *image = [UIImage imageWithData:self.photo.image];
- return image;
- }
- - (LPLinkMetadata *)activityViewControllerLinkMetadata:(UIActivityViewController *)activityViewController
- {
- // 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>
- UIImage *thumbnail = [UIImage imageWithData:self.photo.thumbnail];
- NSItemProvider *imageProvider = [[NSItemProvider alloc] initWithObject:thumbnail];
- LPLinkMetadata *metaData = [[LPLinkMetadata alloc] init];
- metaData.title = (self.photo.article.title.length > 0) ? [NSString stringWithFormat:@"%@ - %@", self.photo.article.articleID, self.photo.article.title] : self.photo.article.articleID;
- metaData.imageProvider = imageProvider;
- return metaData;
- }
- @end
Schönes Wochenende, Mattes
Diese Seite bleibt aus technischen Gründen unbedruckt.