Ich habe eine Frage zum Vergleich von UIImages in Objective-C, wenn ein Bild bereits einen Speicher- und Ladeprozess mit der NSSearchPathForDirectoriesInDomains-Methode durchlaufen hat.Objective-C: Vergleichen eines Bildes mit einem anderen Bild, das zuvor gespeichert wurde
Das Ziel von was ich will ist, den Benutzer zu einem neuen Bildschirm auf einen Klick zu führen, je nachdem, was das Bild anzeigt.
Der Einfachheit halber sagen wir, dass es zwei Möglichkeiten gibt - ein schwarzes Bild und ein grünes Bild. Wenn Sie auf das schwarze Bild klicken, gelangen Sie zu xib1. Wenn Sie auf das grüne Bild klicken, gelangen Sie zu xib2.
Das ist einfach genug und hat funktioniert, bis ich ein System zum Speichern und Laden implementiert habe.
ich folgendes zu speichern:
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
pngFilePath = [NSString stringWithFormat:@"%@/test.png",documentsDirectory];
data1 = [NSData dataWithData:UIImagePNGRepresentation([level1part1 objectAtIndex:0])];
[data1 writeToFile:pngFilePath atomically:YES];
und ich folgendes zu laden:
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
pngFilePath = [NSString stringWithFormat:@"%@/test.png",documentsDirectory];
UIImage *image = [UIImage imageWithContentsOfFile:pngFilePath];
[button1 setImage:image forState:UIControlStateNormal];
Das ist in Ordnung, und wenn ich das Programm beenden und neu starten, es wird das Bild beibehalten auf der Bildschirm, wie ich es mir wünsche. Sagen wir hypothetisch, das Bild, das jetzt auf Knopf1 erscheint, ist das grüne Bild.
Wenn ich den folgenden Code aufrufen, nachdem mit der ID des Senders auf den Button klicken (dies ist button1):
if(sender.currentImage == [UIImage imageNamed:self.greenImage])
{
VisitAlreadyCorrectScreen *screen = [[VisitAlreadyCorrectScreen alloc] initWithNibName:nil bundle:nil];
screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:screen animated:YES];
}
obwohl die currentImage ist das grüne Bild und ist das gleiche Bild wie das grüne Bild I bin im Vergleich es, glaube ich, weil ich das grüne Bild in den Speicher in dem Speichervorgang der Vergleich funktioniert nicht gespeichert, wie sie an verschiedenen Orten im Speicher gehalten werden - überprüft durch die folgende NSLog:
Current Image: <UIImage: 0x95614c0>, and Yes Image: <UIImage: 0xde748f0>
I kann nicht herausfinden, wie man die beiden Bilder so vergleicht In diesem Fall stimmen sie überein (sie beziehen sich beide auf das gleiche Bild, das ich im Ressourcenordner habe). Hat jemand überhaupt irgendwelche Vorschläge?
Bitte lassen Sie mich wissen, wenn ich nicht gut genug erklärt habe, was das Problem ist!
Vielen Dank im Voraus!
Wenn Sie nicht 100% Pixel-für-Pixel-Vergleich benötigen, können Sie dies verwenden, das ist etwa 50 mal schneller als Paul N Lösung: http://StackOverflow.com/a/19668235/423171 – cprcrack
Es könnte Es lohnt sich, in Betracht zu ziehen, UIImage zu erweitern, um einige Bezeichnerfelder hinzuzufügen und Methoden zu vergleichen. (Nicht sicher, wie glücklich UIImage erweitert werden soll.) –