Iphone 选择要在整个应用程序中用作UIViewController背景的图像
当我的iPhone应用程序第一次运行时,它会要求您从iPhone库中选择一个图像作为整个应用程序的背景。以下是相关代码: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
/*
* 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变量缩小范围。