2013-04-02 21 views
1

當我的iPhone應用程序第一次運行時,它會要求您從iPhone庫中選擇一個圖像作爲整個應用程序的背景。下面是相關代碼:在我的應用程序中選擇要用作UIViewController背景的圖像

/* 
* 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只能用於小物體。我應該將它保存到磁盤嗎?但是,我的應用程序不會真的很慢,每次我都會從磁盤讀取數據? (如果這是正確的方式,我將如何做到這一點?)

+0

我注意到你打上一個答案是正確的。沒有必要改變它,但考慮一下,如果你繼承的唯一原因是獲取背景顏色,那麼可以使用外觀協議同樣高效地(並且沒有額外的子類)完成它:[[UIView外觀] setBackgroundColor: [UIColor colorWithPatternImage:img]]; (或者當包含的時候可能對你更有意義)。 – danh

+0

這是否適用於所有ViewControllers? – Nosrettap

+0

對所有的意見。您可以通過使用whenContainedIn變體來縮小這些範圍。 – danh

回答

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

使用一個子類UIViewController,其中背景是總是這個選定的背景圖像,你可以使用@Denpen的建議保存在下面(和+1給他)。

在您的新視圖控制器中,唯一需要存在的是在​​「viewDidLoad:」方法中,您添加一個子視圖,它是一個「UIImageView」,設置爲背景圖像,並保存爲某種偏好。

然後,您可以繼續使用新的「NosetrapViewController」繼續使用其他視圖控制器,該控制器將自動選取所選背景圖像。

相關問題