2013-07-18 72 views
0

我剛開始一個新項目,我希望用戶能夠在設備庫中選擇其中一個圖像。通過代碼訪問圖像庫以在圖像視圖中顯示

我試圖通過使用ImageViewUIStepper來實現此目的。

我想將圖庫中的所有圖像寫入數組,並讓imageView通過步進器的+和 - 按鈕(根據點擊選擇當前數組位置+1或-1)在數組中導航。

回答

2

OK按事先商量獲取的圖像,這裏是項目:AssetLibraryPhotosViewer

還沒有做過廣泛的測試,但似乎在模擬器和真實設備上都運行正常

+0

你真棒。謝謝! – Exothug

0

也許嘗試這樣的事情,選擇目錄,如果你想要一組特定的圖像。

NSMutableArray *result = [NSMutableArray array]; 
[[[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:nil] enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) { 
    NSString *path = [obj lastPathComponent]; 
    [result addObject:path]; 
]; 
+0

有沒有選項可以直接訪問設備庫? – Exothug

+0

林不知道,這是另一種方式來做到這一點:http://stackoverflow.com/questions/7334640/get-path-to-subdirectory-in-resources-folder –

+0

我不會將文件添加到項目中資源,我想從設備庫中讀取它們 – Exothug

0

我認爲,你只需要從你的設備中檢索相機膠捲的照片。

如果是這樣,請嘗試使用此:

ALAssetsLibrary

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
     if(result != NULL) { 
      NSLog(@"See Asset: %@", result); 
     } 
    }; 

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) { 
     if(group != nil) { 
      [group enumerateAssetsUsingBlock:assetEnumerator]; 
     } 
    }; 

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library enumerateGroupsWithTypes:ALAssetsGroupAll 
          usingBlock:assetGroupEnumerator 
         failureBlock: ^(NSError *error) { 
          NSLog(@"Failure"); 
         }]; 

OR

//獲取相機膠捲圖像

- (void)updateLastPhotoThumbnail { 
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; 
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    NSInteger numberOfAssets = [group numberOfAssets]; 
    if (numberOfAssets > 0) { 
     NSLog(@"numberOfPictures: %d",numberOfAssets); 
     //NSInteger lastIndex = numberOfAssets - 1; 
     int i = 0; 
     for (i = 0; i <= numberOfAssets-1; i++) { 
      [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 
       UIImage *thumbnail = [UIImage imageWithCGImage:[result thumbnail]]; 
       NSLog(@"theObject!!!! -- (%d) %@",i,thumbnail); 
       [cameraRollPictures addObject:thumbnail]; 
      }]; 
     } 
    } 
} failureBlock:^(NSError *error) { 
    NSLog(@"error: %@", error); 
}]; 
1

@Exothug,給你如何枚舉設備庫訪問全屏照片的想法:

ALAssetsLibrary* assetLibrary = [[ALAssetsLibrary alloc] init]; 

[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    if (group) { 
     [group enumerateAssetsUsingBlock:^(ALAsset* asset, NSUInteger index, BOOL* innerstop) { 
      if (asset) { 
       ALAssetRepresentation *rep = [asset defaultRepresentation]; 
       CGImageRef iref = [rep fullScreenImage]; 
       if (iref) { 
        UIImage *image = [UIImage imageWithCGImage:iref scale:rep.scale 
                orientation:(UIImageOrientation)rep.orientation]; 
        // process the image here 
       } 
      } 
     }]; 
    } 
} failureBlock:^(NSError *error) { 
    NSLog(@"failure: %@", [error localizedDescription]); 
}];  

你可以通過它添加到您的陣列處理圖像,但是這取決於數量圖書館中的圖像可能不是最有效的。另一種方法是使用圖像URL /索引通過圖書館迭代,從庫作爲其在ImageView的顯示所需

+0

好的。但是我現在怎麼通過我的圖片? – Exothug

+0

我試過使用NSMutableArray,但如果我使用addObject方法,它返回null – Exothug

+0

你能提供一個更簡單的代碼示例來檢索圖像嗎? – Exothug