2013-05-19 26 views
0

嗯,這是我一貫域現在,我已經成功的一些功能,但我需要做的更好。在UIScrollView中填充圖像。而如何做到這一點懶洋洋地

我想從相機膠捲中填充最近的圖像。我很確定有更好的方法來做到這一點。 另一件讓我不安的事情是,這是

Block > loop > another block任何更好的解決方案或簡化表示讚賞。

ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; 
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos 
          usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
           if (nil != group) { 

            [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
            NSLog(@"%d images found", group.numberOfAssets); 
            for(int i = group.numberOfAssets - 5; i<group.numberOfAssets - 1; i++){ 

            [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i] 
                  options:0 
                  usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 
                   if (nil != result) { 
                    ALAssetRepresentation *repr = [result defaultRepresentation]; 

                    UIImage *img = [UIImage imageWithCGImage:[repr fullResolutionImage]]; 

                    CGFloat aspectRatio = img.size.width/img.size.height; 
                    UIImageView *imgView = [[UIImageView alloc] init]; 

                    imgView.frame = CGRectMake(10, self.yCord, 300, 300 /aspectRatio); 

                    self.yCord += margin + (300/aspectRatio); 

                    imgView.image = img; 

                    imgView.layer.shadowRadius = 5.0; 
                    imgView.layer.shadowColor = [UIColor blackColor].CGColor; 

                    [self.scroll addSubview:imgView]; 

                    *stop = YES; 
                    self.scrollViewHeight = self.yCord + imgView.frame.size.height + margin; 
                    CGSize scrollViewSize = CGSizeMake(320, self.scrollViewHeight); 
                    [self.scroll setContentSize:scrollViewSize]; 

                   } 
                  }];} 
           } 

           *stop = NO; 
          } failureBlock:^(NSError *error) { 
           NSLog(@"error: %@", error); 
          }]; 

另外我該如何讓圖像做延遲加載。我現在禁用了分頁功能,並且所有圖像都是同時加載的,這在大多數情況下都是危險的。

+0

http://stackoverflow.com/questions/9200597/trying-to-display-images-using-uiscrollview – 2013-05-19 09:06:55

回答

1

其實你應該使用NSOperationNSOperationQueue這個類,或者也可以使用GCD。 但是,如果您查看相應課程的參考指南,您會發現NSOperation and NSOperation課程具有高水平的靈活性,與GCD的可比性。 在這裏,我想給你在那裏你可以得到的想法如何使用這些提有用的用於此目的的有效教程的一些參考。

下面是本教程中提到的作家在很多細節evreything的鏈接的NSOperation,我敢肯定它會真的幫助你,如果你看看NSOperation and NsoperationQueue use in doing same task i.e downloading images or fetching images from camera in background efficiently.

Here is the tutorial for the GCD.

在這裏,我會喜歡告訴你,爲什麼我給了你這些教程的參考資料,因爲這些教程提供了很多幫助,非常有效地實現這樣的事情。

嗨朋友嘗試獲取一些觀點上面,我只介紹了我的經驗。這取決於你如何參考我的參考。

我感到高興,如果你從上面得到任何想法。

編輯:朋友不要忘記你的要求的最重要的部分,可能是你的類(UIScrollView)最小的內存佔用。想想假設有攝像頭這麼多的圖片,你真的需要獲取所有圖像可能是數百個數字方面假設你要顯示,在UIImageView的圖像。這裏你需要做的遵循Infinite ScrollView的概念(只創建三個mainView只需刷新這些mainView的數據)。即只創建三個mainView視圖1(這將被視爲正確的視圖),view2(將被視爲中心)和View3(看起來像左邊)。你需要寫在這種方式的代碼,你只需要這些視圖分配,並添加所有的UIImageViews在這三個Views.You需要使用委派的UIScrollView管理所有事情。 在這裏,我給剛剛邏輯,你必須在它經歷,甚至我正在迫使你,你應該遵循這個東西在你的應用程序,但清酒用於高速應用的緣故,你應該考慮它。 你可以多線程的通過互聯網爲相同的邏輯,並能找到這個邏輯很多教程。 請不要試圖怪我,如果你不能做同樣的事情,在這裏我給我的意見更好的發展。

我希望你能理解我的觀點。

+0

謝謝。我一直拖延着長時間研究多線程。但現在看來是時候了。肯定會研究它。感謝您精心設計的答案。 – CalZone

+0

@CalZone我歡迎你和大家。我知道每個人都在這裏學習與別人分享他們的學習,可以是你,我和任何其他人。只要保持它的人.... !!!希望你gud luck.and老闆不要忘記接受它,如果y回答真的幫了你。 – Kamarshad

+0

嘿Kamarshad,我試着用GCD重寫上面的代碼。我會深入研究它,但我的主要目的似乎已經解決了。它似乎工作得很好,我要標記你的答案是正確的。再次感謝很多。 :-) – CalZone