Hallo !
Ich habe ein Projekt aus dem ich Bilder "sharen" möchte (Oder eben einfach in die Camera Roll exportieren, das ist ja mit dem UIActivityViewController dann genauso möglich).
Nun können das 1 ... zigtausend Bilder sein im "schlimmsten" Fall.
Ich habe die Bilder nicht lokal, sondern Sie kommen per WLAN von einem Server.
Zuerst habe ich ein "Proof of Concept" mit einem Bild (lokale Resource) und ohne den Provider gemacht --> ging prima.
Ich kann das so aber nicht machen da es wie gesagt potentiell (wenn auch nicht wahrscheinlich) viele Bilder und damit grosse Datenmengen sein können.
Appel bietet da eben den Provider an, der es dann ermöglicht NUR das gerade benötigte (aka "gesharte") Bild zur Verfügung zu stellen statt alle erst mal zu laden und dann zu sharen.
So habe ich es zumindest verstanden, das hörte sich für mich gut an.
Nun habe ich das alles fein (oder eben nicht so fein) codiert und es SCHIEN zu funktionieren. Nach und nach wurden die verschiedenen Bilder vom jeweiligen Provider vom Netz geladen und dann das nächste u.s.w. .
Zum Test habe ich die Option "Save image" genutzt welche die Bilder in die Camera Roll speichert.
Dummerweise ist es so das von den Ausgewählten Bildern nur ein Teil "ankommt". Wenn ich also z.B. 9 Bilder zum "sharen" markiere und dann auf "Save 9 images" drücke dann sind zum Schluss meistens 5 oder 6 Bilder in der Roll. auch mal 4 oder 7 aber Ihr seht das Problem: KEINE 9 !!!!!
Ich habe mir dann das Apple Airdrop sample zur Brust genommen und habe es zunächst soweit modifiziert das statt einem Bild eben 9 Bilder (okay, 9 mal das gleiche aber aus 9 Providern) geshart werden. Das GEHT !
Dann habe ich das sample soweit kastriert wie ich konnte um störendes / anderes / verwirrendes wegzunehmen.
Und siehe da, es gehen dann auch Bilder verloren !!!!
Nun bin ich unsicher ob es das gleiche Problem ist wie in meiner App, aber die ist zu komplex um Sie heir reinzusetzen.
Vielleicht ist einer so nett und guckt sich das mal an.
Hier ist erst mal der Link auf den download des Apple "Airdrop" Examples.
Heisst zwar Airdrop aber im untersten Menüpunkt kann man ein Bild einer Blume nach "Sepia Umrechnung" dann sharen und zwar eben unter anderem "Save image" --> Also in die Camera Roll exportieren.
Airdrop Sample download @ Apple
Hier die Dateien einzeln:
APLAsyncImageViewController.h:
APLAsyncImageViewController.m: (hier kann man sehen das ich in "openActivitySheet" eine Schleife habe in der ich 9 Provider erzeuge, die in einen Array packe und die dann später dem UIActivityViewController mitgebe. Der soll dann hoffentlich nach und nach "item" aufrufen um das jeweilige Bild zu bekommen)
Alles anzeigen
APLAsyncImageActivityItemProvider.h:
APLAsyncImageActivityItemProvider.m: (So, hier eben eine Seltsamkeit. So wie es hier steht werden eben ein paar der 9 "hardwired" gesparten Bilder verloren. Wenn man mit dem Bild "irgendwas" macht, z.B. die 4 Zeilen einkommentiert die das Bild auf 1000x1000 skalieren, DANN klappt es)
Alles anzeigen
Wenn Ihr also das Sample auspackt und die 4 Dateien mit der aus meinem Zip ersetz habt Ihr den Fehelrfall -> einige der 9 Bilde rgehen verloren. Ich habe das mit und ohne ARC probiert, Standart ist natürlich mit ARC.
Hat einer eine Idee was hier schiefgeht ??
Ihr habt Euch sicher schon gedacht das ich keine Ahnung von Objective C habe, bin ein C++ Mensch der für diesen Teil des Projektes eben "etwas" OBJ-C machen muss, also: Bitte seid lieb zu mir
Grüße,
Nils
Ich habe ein Projekt aus dem ich Bilder "sharen" möchte (Oder eben einfach in die Camera Roll exportieren, das ist ja mit dem UIActivityViewController dann genauso möglich).
Nun können das 1 ... zigtausend Bilder sein im "schlimmsten" Fall.
Ich habe die Bilder nicht lokal, sondern Sie kommen per WLAN von einem Server.
Zuerst habe ich ein "Proof of Concept" mit einem Bild (lokale Resource) und ohne den Provider gemacht --> ging prima.
Ich kann das so aber nicht machen da es wie gesagt potentiell (wenn auch nicht wahrscheinlich) viele Bilder und damit grosse Datenmengen sein können.
Appel bietet da eben den Provider an, der es dann ermöglicht NUR das gerade benötigte (aka "gesharte") Bild zur Verfügung zu stellen statt alle erst mal zu laden und dann zu sharen.
So habe ich es zumindest verstanden, das hörte sich für mich gut an.
Nun habe ich das alles fein (oder eben nicht so fein) codiert und es SCHIEN zu funktionieren. Nach und nach wurden die verschiedenen Bilder vom jeweiligen Provider vom Netz geladen und dann das nächste u.s.w. .
Zum Test habe ich die Option "Save image" genutzt welche die Bilder in die Camera Roll speichert.
Dummerweise ist es so das von den Ausgewählten Bildern nur ein Teil "ankommt". Wenn ich also z.B. 9 Bilder zum "sharen" markiere und dann auf "Save 9 images" drücke dann sind zum Schluss meistens 5 oder 6 Bilder in der Roll. auch mal 4 oder 7 aber Ihr seht das Problem: KEINE 9 !!!!!
Ich habe mir dann das Apple Airdrop sample zur Brust genommen und habe es zunächst soweit modifiziert das statt einem Bild eben 9 Bilder (okay, 9 mal das gleiche aber aus 9 Providern) geshart werden. Das GEHT !
Dann habe ich das sample soweit kastriert wie ich konnte um störendes / anderes / verwirrendes wegzunehmen.
Und siehe da, es gehen dann auch Bilder verloren !!!!
Nun bin ich unsicher ob es das gleiche Problem ist wie in meiner App, aber die ist zu komplex um Sie heir reinzusetzen.
Vielleicht ist einer so nett und guckt sich das mal an.
Hier ist erst mal der Link auf den download des Apple "Airdrop" Examples.
Heisst zwar Airdrop aber im untersten Menüpunkt kann man ein Bild einer Blume nach "Sepia Umrechnung" dann sharen und zwar eben unter anderem "Save image" --> Also in die Camera Roll exportieren.
Airdrop Sample download @ Apple
Hier die Dateien einzeln:
APLAsyncImageViewController.h:
APLAsyncImageViewController.m: (hier kann man sehen das ich in "openActivitySheet" eine Schleife habe in der ich 9 Provider erzeuge, die in einen Array packe und die dann später dem UIActivityViewController mitgebe. Der soll dann hoffentlich nach und nach "item" aufrufen um das jeweilige Bild zu bekommen)
Quellcode
- #import "APLAsyncImageViewController.h"
- #import "APLProgressAlertViewController.h"
- NSString * const kProgressAlertViewControllerIdentifier = @"APLProgressAlertViewController";
- @interface APLAsyncImageViewController ()
- @property (strong, nonatomic) UIWindow *alertWindow;
- @property (strong, nonatomic) APLProgressAlertViewController *alertViewController;
- @property (strong, nonatomic) UIPopoverController *activityPopover;
- @property (weak, nonatomic) IBOutlet UIButton *shareImageButton;
- - (IBAction)openActivitySheet:(id)sender;
- @end
- @implementation APLAsyncImageViewController
- - (IBAction)openActivitySheet:(id)sender
- {
- NSMutableArray *itemArray = [[NSMutableArray alloc] init];
- for( int i = 0; i < 9;i++)
- {
- APLAsyncImageActivityItemProvider *aiImageItemProvider = [[APLAsyncImageActivityItemProvider alloc] init];
- [itemArray addObject: aiImageItemProvider];
- }
- //Create an activity view controller with the activity provider item. UIActivityItemProvider (AsyncImageActivityItemProvider's superclass) conforms to the UIActivityItemSource protocol
- UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:itemArray applicationActivities:nil];
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
- //iPhone, present activity view controller as is
- [self presentViewController:activityViewController animated:YES completion:nil];
- }
- else
- {
- //iPad, present the view controller inside a popover
- if (![self.activityPopover isPopoverVisible]) {
- self.activityPopover = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
- [self.activityPopover presentPopoverFromRect:[self.shareImageButton frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
- }
- else
- {
- //Dismiss if the button is tapped while pop over is visible
- [self.activityPopover dismissPopoverAnimated:YES];
- }
- }
- }
- @end
APLAsyncImageActivityItemProvider.h:
APLAsyncImageActivityItemProvider.m: (So, hier eben eine Seltsamkeit. So wie es hier steht werden eben ein paar der 9 "hardwired" gesparten Bilder verloren. Wenn man mit dem Bild "irgendwas" macht, z.B. die 4 Zeilen einkommentiert die das Bild auf 1000x1000 skalieren, DANN klappt es)
Quellcode
- #import "APLAsyncImageActivityItemProvider.h"
- #import "UIImage+Resize.h"
- @implementation APLAsyncImageActivityItemProvider
- - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
- {
- return [[UIImage alloc] init];
- }
- - (id)item
- {
- UIImage *image = [UIImage imageNamed:@"Flower.png"];
- //uncomment the next 4 lines (simple scaling using the methods in "UIImage+Resize.h/.m") to make sharing work !!!!
- //CGSize imageSize;
- //imageSize.height = 1000;
- //imageSize.width = 1000;
- //image = [UIImage imageWithImage:image scaledToFitToSize:imageSize];
- return image;
- }
- - (UIImage *)activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(NSString *)activityType suggestedSize:(CGSize)size
- {
- //The filtered image is the image to display on the other side.
- return [[UIImage alloc] init];
- }
- @end
Wenn Ihr also das Sample auspackt und die 4 Dateien mit der aus meinem Zip ersetz habt Ihr den Fehelrfall -> einige der 9 Bilde rgehen verloren. Ich habe das mit und ohne ARC probiert, Standart ist natürlich mit ARC.
Hat einer eine Idee was hier schiefgeht ??
Ihr habt Euch sicher schon gedacht das ich keine Ahnung von Objective C habe, bin ein C++ Mensch der für diesen Teil des Projektes eben "etwas" OBJ-C machen muss, also: Bitte seid lieb zu mir
Grüße,
Nils