Как использовать изображение, снятое в 1stViewController в 2ndViewController? - PullRequest
1 голос
/ 25 января 2010

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

Все работает, что касается FirstViewController. К сожалению, изображение больше не устанавливается в качестве фона, когда отображается SecondViewController.

Как включить использование изображения в качестве фона для SecondViewController?

Я использовал этот кусок кода (в SecondViewController):

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
int bla = [prefs integerForKey:@"background_key"];
if (bla == 1) {
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"1.mac.jpg"]];
} else if (bla == 2) {
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"black.jpg"]];
} else if (bla == 3) {
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"pinn.png"]];
} else if (bla == 4) {
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"MyImage.png"]];
}

Я пытался сохранить выбранное изображение как «MyImage.png», но похоже, что оно не работает. Фон выбран вместо черного изображения.

Я использовал этот код (из 1stViewController), чтобы сохранить выбранное изображение как «MyImage.png»:

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

//UIImage *selectedImage;
NSURL *mediaUrl;

mediaUrl = (NSURL *)[anInfo valueForKey:UIImagePickerControllerMediaURL];
if (mediaUrl == nil)
{
    selectedImage = (UIImage *) [anInfo valueForKey:UIImagePickerControllerEditedImage];
    if (selectedImage == nil)
    {
        selectedImage = (UIImage *) [anInfo valueForKey:UIImagePickerControllerOriginalImage];
        NSLog(@"Original image picked.");
    }
    else
    {
        NSLog(@"Edited image picked.");
    }
}

[picker dismissModalViewControllerAnimated:YES];
if (selectedImage != nil)
{
    self.view.backgroundColor = [UIColor colorWithPatternImage:selectedImage];
}

// Get the image from the result
UIImage* ownImage = [anInfo valueForKey:UIImagePickerControllerOriginalImage];

// Get the data for the image as a PNG
NSData* imageData = UIImagePNGRepresentation(ownImage);

// Give a name to the file
NSString* imageName = @"MyImage.png";

// Now, we have to find the documents directory so we can save it
// Note that you might want to save it elsewhere, like the cache directory,
// or something similar.
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];

// Now we get the full path to the file
NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];

// and then we write it out
[imageData writeToFile:fullPathToFile atomically:NO];

return;
}

Должна быть ошибка или логическая ошибка. Помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 25 января 2010

ImageNamed обычно используется для загрузки изображений, которые являются частью ресурсов приложения.

Я подозреваю, что вы хотите:

UIImage* image = [UIImage imageWithContentsOfFile:fileNameAndPath];
0 голосов
/ 25 января 2010

Попробуйте загрузить изображение с кодом, аналогичным тому, как вы его сохраняете, вместо использования +imageNamed:: создайте полный путь и загрузите его оттуда.

+imageNamed: «ищет изображение с указанным именем в основном комплекте приложения». ( UIImage ссылка ), но это не то место, куда вы его сохраняете. Я не думаю, что вы можете написать в комплекте приложения, поэтому вы не сможете использовать +imageNamed: здесь.

...