1

当我的 iPhone 应用程序第一次运行时,它会要求您从 iPhone 库中选择一张图像作为整个应用程序的背景。以下是相关代码:

/*
 *   Responds when an image is selected (from browsing)
 */
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    [self dismissModalViewControllerAnimated:YES];
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage])
    {
        //Not really sure what to do here
        UIImage *image = [[UIImage alloc] initWithData:UIImageJPEGRepresentation([info objectForKey:UIImagePickerController], .2)];
    }
}

我现在要保存此图像(或对此图像的引用),以便我可以在整个应用程序中使用它作为我的某些(60%)的背景UIViewController

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

最好/最有效/最简单的方法是什么。我想过将图像保存到其中NSUserDefaults,但这似乎不正确,因为NSUserDefaults它只应该用于小物体。我应该将其保存到磁盘吗?但是,我的应用程序在每次 segue 时都必须从磁盘读取数据会不会很慢?(如果这是正确的方法,我该怎么做?)

4

2 回答 2

3

将您的图像存储在文档目录中以保存图像

- (void)saveImage:(UIImage *)image {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];

    // Convert to Data
    NSData *imageData = UIImagePNGRepresentation(image);
    // write to file
    [imageData writeToFile:savedImagePath atomically:NO];
}

要阅读图像使用以下

- (UIImage *)getImage {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,     NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];
    UIImage *img = [UIImage imageWithContentsOfFile:getImagePath];
    return img;
}
于 2013-04-02T04:15:55.073 回答
1

使用一个子类 UIViewController ,其中背景始终是这个选定的背景图像,您可以使用下面的@Dipen 的建议(以及对他 +1)保存它。

从字面上看,您的新视图控制器中唯一需要存在的是,在它的“ viewDidLoad:”方法中,您添加了一个“ UIImageView”子视图,设置为您保存为某些偏好的背景图像。

然后,您可以从新的“ NosetrapViewController”中继承进一步的视图控制器,这将自动拾取选定的背景图像。

于 2013-04-02T04:15:54.547 回答