2014-10-30 17 views
5

Genauer gesagt, wie können Sie wissen, ob eine PHAsset aktuelle Version des zugrunde liegenden Assets anders als das Original hat?Wie kann man wissen, ob ein PHAsset modifiziert wurde?

Mein Benutzer sollte nur bei Bedarf zwischen dem aktuellen oder Original-Asset wählen. Und dann brauche ich ihre Antwort für PHImageRequestOptions.version.

Antwort

4

Ich habe zwei Möglichkeiten gefunden, PHAsset für Änderungen zu überprüfen, und ich habe es als Gist veröffentlicht.

EDIT: Ich war an dem Punkt, wo ich die gleiche Funktionalität für PHAsset mit einem Bild benötigt. Ich benutzte dieses:

2

Werfen Sie einen Blick auf PHImageRequestOptionsVersion

PHImageRequestOptionsVersionCurrent

Antrag die neueste Version des Bildes Asset (derjenige, der alle Änderungen widerspiegelt). Das resultierende Bild ist die gerenderte Ausgabe aller zuvor vorgenommenen Anpassungen.

PHImageRequestOptionsVersionUnadjusted

Anfrage eine Version des Bildes Asset ohne Anpassungen.
Wenn das Asset bearbeitet wurde, spiegelt das resultierende Bild den Status des Assets wider, bevor Änderungen vorgenommen wurden.

PHImageRequestOptionsVersionOriginal

Antrag das Original, höchste Genauigkeit Version des Bildes Asset. Das resultierende Bild ist die ursprünglich erfasste oder importierte Version des Elements , unabhängig von vorgenommenen Änderungen.

Wenn Sie den Benutzer vor dem Abrufen von Assets fragen, wissen Sie, welche Version der Benutzer angegeben hat. Wenn Sie von einer anderen Stelle ein Phasset erhalten, können Sie eine revertAssetContentToOriginal erstellen, um das ursprüngliche Asset zu erhalten. Und PHAsset verfügt über die Eigenschaften modificationDate und creationDate, mit denen Sie feststellen können, ob ein PHAsset geändert wurde.

+0

Ich habe die Frage aktualisiert, ich brauche die Informationen zu erstellen * PHImageRequestOptions * richtig. –

+0

[Dokumentation] (https://developer.apple.com/library/IOs/documentation/Photos/Reference/PHAsset_Class/index.html#//apple_ref/occ/instp/PHAset/modificationDate): 'Fotos aktualisiert das Änderungsdatum Wenn sich das Bild oder der Videoinhalt eines Assets oder Metadaten ändern. "Das Änderungsdatum ändert sich also auch, wenn Sie ein Bild favorisieren. –

+0

Hast du einen Test gemacht? – gabbler

0

Ich fand diesen Code der einzige, der für jetzt arbeitet, und es behandelt die meisten Randfälle. Es ist vielleicht nicht der schnellste, funktioniert aber für die meisten Bildtypen gut. Es nimmt das kleinstmögliche Original und modifizierte Bild und vergleicht deren Dateninhalt.

@implementation PHAsset (Utilities) 
- (void)checkEditingHistoryCompletion:(void (^)(BOOL edited))completion 
{ 
    PHImageManager *manager = [PHImageManager defaultManager]; 

    CGSize compareSize = CGSizeMake(64, 48); 

    PHImageRequestOptions *requestOptions = [PHImageRequestOptions new]; 
    requestOptions.synchronous = YES; 
    requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat; 
    requestOptions.version = PHImageRequestOptionsVersionOriginal; 

    [manager requestImageForAsset:self 
         targetSize:compareSize 
         contentMode:PHImageContentModeAspectFit 
          options:requestOptions 
        resultHandler:^(UIImage *originalResult, NSDictionary *info) { 

         UIImage *currentImage = originalResult; 

         requestOptions.version = PHImageRequestOptionsVersionCurrent; 

         [manager requestImageForAsset:self 
              targetSize:currentImage.size 
              contentMode:PHImageContentModeAspectFit 
               options:requestOptions 
             resultHandler:^(UIImage *currentResult, NSDictionary *info) { 

              NSData *currData = UIImageJPEGRepresentation(currentResult, 0.1); 
              NSData *orgData = UIImageJPEGRepresentation(currentImage, 0.1); 

              if (completion) { 

               //handle case when both images cannot be retrived it also mean no edition 
               if ((currData == nil) && (orgData == nil)) { 
                completion(NO); 
                return; 
               } 

               completion(([currData isEqualToData:orgData] == NO)); 
              } 
             }]; 
        }]; 
} 

@end 
+0

Ihre Lösung funktioniert nur für Bilder. Zweiter Codeblock (der nach EDIT) von akzeptierter Antwort funktioniert nicht für Sie? –

+0

Leider nein:/Ich erhalte auch nach der Änderung einen normalen Pfad. Beispiel: Pfad \t NSString * \t @ "/ var/mobile/Medien/DCIM/100APPLE/IMG_0736.PNG" \t 0x15d683d0 –

Verwandte Themen