2014-02-17 2 views
0

У меня есть игра, в которой используется библиотека фотографий. Вы выбираете фотографию из библиотеки, а затем переходите к следующему экрану, и фотография есть. Вы играете в игру, а затем, когда закончите, у вас есть возможность снова перезапустить игру. У меня все работает до этого момента. Проблема, с которой я столкнулся сейчас, - это когда игра перезапускается, фотография не загружается. Я искал все решения, но я ничего не могу найти, чтобы помочь мне.Загрузите UIImage после перезагрузки игры

Так что в основном мне нужен способ для игры, чтобы сохранить фотографию, чтобы пользователь мог продолжить играть с этой фотографией после того, как они нажмут кнопку re start. Есть ли у кого-нибудь идеи, как я могу это достичь?

Примечание: фото может быть перезаписано, если пользователь решит выбрать другую фотографию, если новая фотография будет сохранена.

Спасибо за ваше время

EDIT

Это в моем MenuViewController

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    self.myImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    [self performSegueWithIdentifier:@"game" sender:self]; 
    [self saveImage]; 

} 

-(void) saveImage { 

    NSData *pngData = UIImagePNGRepresentation(myImage); 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
    NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name 
    [pngData writeToFile:filePath atomically:YES]; //Write the file 
} 

Тогда в моих ViewController (где изображение нагрузок для игры

- (void)viewDidLoad 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; 
NSData *pngData = [NSData dataWithContentsOfFile:filePath]; 
UIImage *image = [UIImage imageWithData:pngData]; 
[copter setImage:image]; 


} 

А на моей кнопке перезагрузки

- (IBAction)refreshTheGame { 


     UIStoryboard *storyboard = self.storyboard; 
     ViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"GML"]; 
     svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
     [self presentModalViewController:svc animated:YES]; 
     [self loadSavedImage]; 
    } 

    -(void) loadSavedImage { 

     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory 
     NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; 
     NSData *pngData = [NSData dataWithContentsOfFile:filePath]; 
     UIImage *image = [UIImage imageWithData:pngData]; 
     [copter setImage:image]; 
    } 
+0

Некоторый код пожалуйста !! Мы не можем догадаться, почему ваш код не работает! – Merlevede

ответ

0

Когда пользователь выбирает фотографию вы можете сохранить данные из UIImage из в файл с известным именем, и просто загрузить его в следующий раз игра возобновляется. Чтобы сохранить UIImage в файл:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"gameImage.png"]; 
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]; 

И загрузить его снова:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"gameImage.png"]; 
NSData *imageData = [NSData dataWithContentsOfFile:filePath];    
UIImage *img = [UIImage imageWithData:imageData]; 

В качестве альтернативы, вы можете сохранить UIImage за пределами ваших игровых данных, так что вы можете загрузить его в следующий раз без необходимости попадания в файловую систему.

+0

Спасибо за ваш ответ, я попробовал то, что вы сказали, но он все равно не будет загружаться при запуске. Я отправил код выше, я пропустил что-нибудь еще? Спасибо mate – user2632573

+0

@ user2632573 Я предполагаю, что '-refreshTheGame' находится в том же классе, что и метод' -viewDidLoad' выше? Если да, попробуйте вставить '[copter setImage: img];' как последнюю строку в методе '-refreshTheGame'. Похоже, что вы правильно загружаете изображение из файла, но тогда вы ничего не делаете с ним. – rickerbh

+0

Привет и спасибо, но, к сожалению, даже добавив, что линия все еще не перезагружает эту фотографию. Я пробовал много разных способов, но фотография никогда не возвращается. Я не уверен, что это имеет значение, но изображение в ViewController - это просто пустой UIImageView, затем, когда я выбираю фотографию из MenuViewController и нажимаю кнопку воспроизведения, он загружает эту фотографию в UIImageView. Когда я перезапускаю игру, UIImageView снова пуст, и изображение вообще не появляется. благодаря – user2632573

0

Я разработал то, что я делал неправильно. Я редактировал мой код выше с рабочим кодом.

Смежные вопросы