2012-08-26 66 views
9

我正在使用Iphone應用程序,我可以使用Assetslibrary枚舉資產並將它們加載到表視圖中。用戶可以刪除應用中的一行(圖片/視頻),但是如何直接從我的應用更新Iphone相冊?否則,在刷新時,tableview將重新加載先前刪除的資產。從IOS中的IPhone刪除資產(圖片或視頻)

回答

0

可能重複https://stackoverflow.com/a/11058934/300292。簡單的回答:你不能。照片應用是唯一可以刪除資源的地方。這可能是一件好事 - 你不希望任何無聊的應用程序能夠刪除所有的照片,你會嗎?

+0

只是想肯定。謝謝。 –

1

它遲了,但對於其他用戶它會有所幫助。
正如我們所知,只有照片應用程序可以刪除圖像。在這種情況下,我通過alassets從照片中檢索所有圖像,在自定義圖庫中查看它們,並給出用戶從資產中選擇多個圖像以將其保存在電話目錄中的選項。接下來,我使用我的應用程序庫而不是照片庫。我已經在應用程序中給出了選項,可以隨時將圖片從照片導入到應用程序庫(這是圖像的文檔目錄文件夾)。

15

在iOS8上刪除照片可以使用照片框架

請檢查照片的文件框架

刪除資產是指PHAssetChangeRequest

+ (void)deleteAssets:(id<NSFastEnumeration>)assets 

其中assetsPHAsset對象的數組被刪除。

+

對於刪除集合指PHAssetCollectionChangeRequest

+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections 

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets
https://developer.apple.com/documentation/photos/phassetcollectionchangerequest/1619453-deleteassetcollections

+0

我不相信應用程序能夠從照片庫中刪除資產。我想看一個例子。 – coco

+0

如果我只有圖像和圖像的本地標識符如「AF508E2B-6B00-4E26-8A2B-B160C74478A9/L0/001」該怎麼辦。那麼如何從圖庫中的自定義相冊中刪除圖像? –

10

特德說,這是現在可以在iOS版8使用照片的服務。實際上它很乾淨。您需要向光盤庫提交更改請求。這是一個例子。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
    [PHAssetChangeRequest deleteAssets:arrayOfPHAssets]; 
} completionHandler:^(BOOL success, NSError *error) { 
    NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error)); 
}]; 

請確保您已導入照片,並獲得用戶的授權。 (你可能沒有顯示已圖像)

PHAssetchangeRequest - deleteAssets https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets PHPhotoLibrary類 - authorizationStatus https://developer.apple.com/documentation/photos/phphotolibrary/1620745-authorizationstatus

+0

什麼是arrayOfPHAssets?我想從相冊中刪除單個視頻。你可以幫我嗎 ? – Gaurav

1

添加一個答案,一個老問題在這裏,因爲我們經常問截圖預防的一部分的數據丟失預防(DLP)解決方案。您可以(a)註冊屏幕截圖通知,並(b)要求用戶在發生時進行刪除,但無法默默或祕密地進行刪除。這裏有一個完整的工作代碼示例:

func applicationDidBecomeActive(application: UIApplication) { 
    registerForScreenShotNotifications() 
} 

func registerForScreenShotNotifications() { 
    NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationUserDidTakeScreenshotNotification, object: nil, queue: NSOperationQueue.mainQueue()) { (notification) in 
     print("Yep they took a screenshot \(notification)") 

     let assetToDelete = self.getLastImage() 
     if let assetToDelete = assetToDelete 
     { 
      PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
       PHAssetChangeRequest.deleteAssets([assetToDelete]) 
       }, completionHandler: { (success, error) in 
        print("Success \(success) - Error \(error)") 
      }) 

     } 
    } 
} 

// NOTE : You should ask for permission to access photos before this 
func getLastImage() -> PHAsset? { 
    let fetchOptions = PHFetchOptions() 
    fetchOptions.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: true) ] 
    let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) 
    let newestAsset = fetchResult.lastObject 

    return newestAsset as! PHAsset? 
} 

結果是這樣的:

ScreenShot Remover Sample Code Result