在我的应用程序中选择要用作UIViewController背景的图像

时间:2013-04-02 04:05:58

标签: iphone ios objective-c uiimage uiimagepickercontroller

当我的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)];
    }
}

我现在要保存此图片(或对此图片的引用),以便我可以在整个应用中使用它作为UIViewController

的某些(60%)的背景
self.view.backgroundColor = [UIColor colorWithPatternImage:image];

什么是最好/最有效/最简单的方法。我考虑将图像保存到NSUserDefaults但这似乎不对,因为NSUserDefaults仅适用于小对象。我应该把它保存到磁盘吗?但是,每次我发布时,我的应用程序都不会非常慢地从磁盘读取? (如果这是正确的方法,我该怎么做?)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

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

然后,您可以从新的“NosetrapViewController”继承其他视图控制器,这将自动选取所选的背景图像。