【问题标题】:Select image to use as UIViewController background throughout my app在我的应用程序中选择要用作 UIViewController 背景的图像
【发布时间】:2013-04-02 04:05:58
【问题描述】:

当我的 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 应该只用于小物体。我应该将其保存到磁盘吗?但是,我的应用程序在每次 segue 时都必须从磁盘读取数据会不会很慢? (如果这是正确的方法,我该怎么做?)

【问题讨论】:

  • 我注意到您将答案标记为正确。无需更改,但请考虑,如果您进行子类化的唯一原因是获取该背景颜色,您可以使用外观协议同样有效地(并且没有额外的子类):[[UIView appearance] setBackgroundColor: [UIColor colorWithPatternImage:img]]; (或 appearanceWhenContainedIn 可能对您更有意义)。
  • 这将适用于所有 ViewControllers 吗?
  • 所有视图。您可以使用 whenContainedIn 变体来缩小范围。

标签: iphone ios objective-c uiimage uiimagepickercontroller


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    然后,您可以从新的“NosetrapViewController”子类化更多视图控制器,这将自动拾取选定的背景图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      相关资源
      最近更新 更多