1

ユーザーは、既存の画像を使用するか、新しい画像を背景として使用するかを選択できます。

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;
}

間違いまたは論理的な間違いがあるに違いありません。助けていただければ幸いです!

4

2 に答える 2

0

を使用する代わりに、保存方法と同様のコードで画像を読み込んでみてください+imageNamed:。完全なパスを作成し、そこから読み込みます。

+imageNamed:「アプリケーションのメイン バンドルで指定された名前のイメージを探します。」( UIImage リファレンス) ですが、それは保存先ではありません。アプリのバンドルには書き込めないと思いますので、+imageNamed:こちらではご利用いただけません。

于 2010-01-24T21:39:09.933 に答える
0

ImageNamed は通常、アプリケーションのリソースの一部として含まれるイメージを読み込むために使用されます。

私はあなたが欲しいと思う:

UIImage* image = [UIImage imageWithContentsOfFile:fileNameAndPath];
于 2010-01-24T21:45:40.253 に答える