Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 选择要在整个应用程序中用作UIViewController背景的图像_Iphone_Ios_Objective C_Uiimage_Uiimagepickercontroller - Fatal编程技术网

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

Iphone 选择要在整个应用程序中用作UIViewController背景的图像,iphone,ios,objective-c,uiimage,uiimagepickercontroller,Iphone,Ios,Objective C,Uiimage,Uiimagepickercontroller,当我的iPhone应用程序第一次运行时,它会要求您从iPhone库中选择一个图像作为整个应用程序的背景。以下是相关代码: /* * Responds when an image is selected (from browsing) */ -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSStri

当我的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%的背景


做这件事最好/最有效/最简单的方法是什么。我曾考虑将图像保存到NSUserDefaults中,但这似乎不正确,因为NSUserDefaults只适用于小对象。我应该把它保存到磁盘上吗?但是,我的应用程序不是真的很慢吗?每次我切换时都要从磁盘读取数据?如果这是正确的方法,我将如何做到这一点?

使用子类UIViewController,其中背景始终是选定的背景图像,您可以使用下面@Dipen的建议和+1将其保存下来

实际上,新视图控制器中唯一需要存在的是,在它的viewDidLoad:方法中,添加一个子视图,该子视图是UIImageView,设置为背景图像,并将其保存为某些首选项


然后,您可以从新的NostrapViewController中将更多视图控制器分为子类,该控件将自动拾取选定的背景图像。

使用子类UIViewController,其中背景始终是此选定的背景图像,您可以使用@Dipen的建议将其保存下来,并向他发送+1

实际上,新视图控制器中唯一需要存在的是,在它的viewDidLoad:方法中,添加一个子视图,该子视图是UIImageView,设置为背景图像,并将其保存为某些首选项


然后,您可以从新的NostrapViewController中将进一步的视图控制器子类化,它将自动拾取选定的背景图像。

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

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

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

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

我注意到你把答案标对了。不需要改变这一点,但是要考虑的是,如果子类的唯一原因是提取背景颜色,那么你可以像使用外观协议那样高效和没有额外的子类:[UIVIEWSUV] SETBACKBASESTORK:或者包含在其中的外观可能对您更有意义。这是否适用于所有视图控制器?适用于所有视图。您可以使用whenContainedIn变量缩小范围。我注意到您将答案标记为正确。不需要改变这一点,但是要考虑的是,如果子类的唯一原因是提取背景颜色,那么你可以像使用外观协议那样高效和没有额外的子类:[UIVIEWSUV] SETBACKBASESTORK:或者包含在其中的外观可能对您更有意义。这是否适用于所有视图控制器?适用于所有视图。您可以使用whenContainedIn变量缩小范围。