2011-07-25 19 views
102

Kullanıcının kaydedilinceye kadar görüntü yerleştirmesine ve tutmasına olanak veren bir UIImageView var. Sorun şu ki, manzaraya yerleştirdiğim görüntüyü nasıl kaydedeceğimi ve nasıl alacağımı anlayamıyorum.Uygulama Belgeleri Klasörüne UIView Üzerinden Bir Görüntü Kaydet IOS

Ben alınır ve böyle UIImageView görüntüyü vermiş:

//Get Image 
- (void) getPicture:(id)sender { 
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.allowsEditing = YES; 
    picker.sourceType = (sender == myPic) ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage (UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
    myPic.image = image; 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

O sadece iyi benim UIImageView seçilen görüntüyü gösterir, ancak bunu kaydetmek için nasıl hiçbir fikrim yok. Çekirdek Verilerdeki tüm diğer görünümleri (çoğunlukla UITextfield) kaydediyorum. Arama yaptım ve aradım ve insanların önerdiği birçok kod parçasını denedim, ancak kodu doğru bir şekilde girmiyorum ya da bu öneriler kod ayarlamamla çalışmaz. Muhtemelen eskidir. Metni UITextFields'a kaydetmek için kullanıyorum aynı eylemi kullanarak (kaydetme düğmesi) UIImageView görüntüsünü kaydetmek istiyorum. İşte benim UITextField bilgi saklıyorum edebilirsiniz: Daha önce söylediğim gibi, ben işe bu almak için çeşitli yöntemler denedi, ancak üzerinde bir kavrayışa alamayan

// Handle Save Button 
- (void)save { 

    // Get Info From UI 
    [self.referringObject setValue:self.myInfo.text forKey:@"myInfo"]; 

. Hayatımda ilk kez cansız bir cisme fiziksel zarar vermek istemiştim, ama kendimi dizginlemeyi başardım.

Kullanıcıya, görüntüyü uygulamanın belgeler klasöründeki UIImageView içine kaydedebilme ve daha sonra kullanıcı bu görünümü üzerine iterken, görüntüyü başka bir UIImageView görüntüsüne yerleştirmek istiyorum. yığını. Herhangi bir yardım büyük beğeni topluyor!

cevap

323

Her şey yolunda, dostum. Kendinize veya başkalarına zarar verme.

Büyük olasılıkla veri kümesi çok büyürse performansı etkileyebileceğinden, bu görüntüleri Core Data'da saklamak istemezsiniz. Resimleri dosyalara yazmak daha iyidir.

NSData *pngData = UIImagePNGRepresentation(image); 

Bu, çektiğiniz görüntünün PNG verilerini çeker. Buradan, bir dosyaya yazabilirsiniz: bir dosyaya yazabilirsiniz: Daha sonra okumak aynı şekilde çalışır. biz sadece yukarıda yaptığımız gibi, sonra yolunu kurmak:

NSData *pngData = [NSData dataWithContentsOfFile:filePath]; 
UIImage *image = [UIImage imageWithData:pngData]; 

Ne muhtemelen yapmak isteyeceğiniz her yerde çevrili bu kodu istemiyoruz çünkü sizin için yol dizeleri oluşturan bir yöntemi yapmak olduğunu. Şunlara benzeyebilir:

- (NSString *)documentsPathForFileName:(NSString *)name 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsPath = [paths objectAtIndex:0]; 

    return [documentsPath stringByAppendingPathComponent:name]; 
} 

Swift ise

+2

tamamen doğru - istiyorum böylece görüntülerin niteliğine bağlı olarak, bu Önbellekler –

+0

I altında saklanmalıdır Elma Depolama Kuralları söz öneri ve kod takip etti. ancak fotoğraf bölümlerinde görünmüyor. Bu nasıl oldu? – NovusMobile

+0

@DaniloCampos Documents Directory içinde bir klasör nasıl oluşturulur ve dosyayı bu klasörün içine nasıl kaydederim? –

0

:

let paths: [NSString?] = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .LocalDomainMask, true) 
if let path = paths[0]?.stringByAppendingPathComponent(imageName) { 
    do { 
     try UIImagePNGRepresentation(image)?.writeToFile(path, options: .DataWritingAtomic) 
    } catch { 
     return 
    } 
} 
2

Swift 3.0 sürümü

let documentDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString 

let img = UIImage(named: "1.jpg")!// Or use whatever way to get the UIImage object 
let imgPath = URL(fileURLWithPath: documentDirectoryPath.appendingPathComponent("1.jpg"))// Change extension if you want to save as PNG 

do{ 
    try UIImageJPEGRepresentation(img, 1.0)?.write(to: imgPath, options: .atomic)//Use UIImagePNGRepresentation if you want to save as PNG 
}catch let error{ 
    print(error.localizedDescription) 
}