2010-01-31 17 views
10

क्या कोई तरीका है कि मैं एक छवि को हटा सकता हूं जो मेरे ऐप में UIImagePickerController से लोड हो गया है?उपयोगकर्ता की फोटो लाइब्रेरी से एक फोटो हटाएं?

जब उपयोगकर्ता एक विशिष्ट कार्रवाई करता है तो मैं उपयोगकर्ता की फोटो लाइब्रेरी से छवि को हटाने में सक्षम होना चाहता हूं।

मैं उपयोगकर्ता को अपनी लाइब्रेरी से एक छवि चुनने के लिए प्रेरित कर रहा हूं, तो यह मेरे ऐप में लोड हो जाता है जिस पर ऐप कुछ shnazzy एनीमेशन करता है, तो वास्तव में छवि को हटा देता है।

कृपया मदद करें!

उत्तर

15

ऐप्पल वास्तव में आपको एपीआई के माध्यम से फोटो लाइब्रेरी से हटाने की अनुमति नहीं देता है। उपयोगकर्ता को वास्तव में फ़ोटो ऐप पर जाना होगा और इसे मैन्युअल रूप से हटा देना होगा। एप्पल की अनुमति नहीं है आप फोटो लाइब्रेरी में लिखें:

उपयोगकर्ता के सहेजी गयी तस्वीरें एल्बम के एक अभी भी छवि बचाने के लिए, UIImageWriteToSavedPhotosAlbum समारोह का उपयोग करें। उपयोगकर्ता के सहेजे गए फ़ोटो एलबम में मूवी को सहेजने के लिए, UISaveVideoAtPathToSavedPhotosAlbum फ़ंक्शन का उपयोग करें।

लेकिन मौजूदा तस्वीर को हटाने और संपादित करने/ओवरराइड करने के लिए, ऐप्पल के पास अभी कुछ भी नहीं है।

+0

हम एक विलोपन तस्वीरें फ्रेमवर्क का प्रयोग करके अनुरोध नहीं कर सकते हैं? मुझे लगता है, हाँ हम कर सकते हैं। –

+0

PHAssetChangeRequest.deleteAssets ([propertyToDelete]) –

+0

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets –

10

दरअसल, आप अपने ऐप द्वारा सहेजी गई तस्वीरों को हटा सकते हैं (UIImageWriteToSavedPhotosAlbum API कॉल के साथ फोटो लाइब्रेरी में सहेजा गया)।

प्रलेखित एपीआई [ALAsset setImageData:metadata:completionBlock:] काम करता है।

1)। अपनी परियोजना

2) में एक छवि "photo.jpg" जोड़ें। संपत्ति लाइब्रेरी में एक छवि सहेजें:

ALAssetsLibrary *lib = [ALAssetsLibrary new]; 
UIImage *image = [UIImage imageNamed:@"photo.jpg"]; 
[lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) { 
    NSLog(@"Write image %@ to asset library. (Error %@)", assetURL, error); 
}]; 

3)। डिफ़ॉल्ट गैलरी पर जाएं, आपको अपने "सहेजे गए फ़ोटो" एल्बम में photo.jpg मिलेगा।

4)। संपत्ति पुस्तकालय से इस छवि को हटाएं:

ALAssetsLibrary *lib = [ALAssetsLibrary new]; 
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) { 
     if(asset.isEditable) { 
      [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { 
       NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error); 
      }]; 
     } 
    }]; 
} failureBlock:^(NSError *error) { 

}]; 

5)। डिफ़ॉल्ट गैलरी पर जाएं, आपको फोटो मिलेगा। Jpg पहले से ही हटा दिया गया है।

+0

यह काम करता है :)। लेकिन, setImageData: मेटाडेटा: समापनब्लॉक फ़ंक्शन का उपयोग किसी छवि को प्रतिस्थापित करने के लिए किया जाता है, इसे ऐप्पल दस्तावेज़ों के अनुसार हटाएं नहीं। क्या आपको यकीन है कि ऐपस्टोर में कोई समस्या नहीं होगी? – Sukhrob

+1

मेरे पास पहले से ही ऐप्पल स्टोर में एक ऐप है, यह एक सार्वजनिक एपीआई है, ऐप समीक्षा प्रक्रिया में कोई समस्या नहीं है। – evanchin

+0

यह मेरे लिए भी काम करता है। धन्यवाद! –

0

हाँ हम एक फोटो हटा सकते हैं। हम इस ऑपरेशन के लिए PHAssetChangeRequest का उपयोग कर सकते हैं।

एप्पल से:

, एक फोटो लाइब्रेरी परिवर्तन ब्लॉक में उपयोग के लिए, के लिए, बनाने के लिए हटाना परिवर्तन मेटाडाटा, या संपादित तस्वीरें परिसंपत्ति की सामग्री एक अनुरोध।

class func deleteAssets(_ assets: NSFastEnumeration) 

जहां संपत्ति: PHAsset वस्तुओं की एक सरणी हटाए जाने के लिए।

PHAssetChangeRequest.deleteAssets([assetToDelete]) 

तो, आप संपत्तियों को हटाने के लिए उपरोक्त कोड का उपयोग कर सकते हैं।

नीचे

तेज 3 कोड है,

PHPhotoLibrary.shared().performChanges({ 
      let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: imageUrls as! [URL], options: nil) 
      PHAssetChangeRequest.deleteAssets(imageAssetToDelete) 
     }, completionHandler: {success, error in 
      print(success ? "Success" : error) 
     }) 
संबंधित मुद्दे