Ленивая загрузка фотографий PhotoLibrary - PullRequest
0 голосов
/ 08 октября 2011

Я обнаружил проблему с изображениями из библиотеки фотографий. Он не отображается в моем представлении в первый раз, при загрузке в первый раз просмотр изображений будет пустым.

Поскольку я обнаружил, что блок библиотеки активов работает в другом потоке. После перезагрузки моего просмотра я вижу все изображения. Однако в первый раз представления изображений пустые.

может кто-нибудь сказать мне хороший способ справиться с проблемой

Работает с Bundle Images.

также иногда консоль показывает, что

приложение вылетает из-за принятого Программой сигнала: «0». Форматирование данных временно недоступно, повторная попытка после «продолжения». (Неизвестная ошибка загрузки общей библиотеки "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")

Мой код:

  for (int j = 0; j<9; j++)
                {

          //allocating View         
           UIView *smallView = [[UIView alloc] initWithFrame:CGRectMake(xCordImage, yCordImage, 200, 190)];




            // allocating ImageView
            imageViewTopic = [[[UIImageView alloc] init] autorelease];                      


            typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
                                typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);    

            ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
                                {
            ALAssetRepresentation *rep = [myasset defaultRepresentation];
            CGImageRef iref = [rep fullResolutionImage];
            UIImage *images;
                    if (iref) {

                        images = [UIImage imageWithCGImage:iref];                               

                    }

                    else {

                    images = [UIImage imageNamed:@"Nofile.png"];

                    }



                imageViewTopic .image  = images ;



            };



            ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
                                    {

                    imageViewTopic .image  = [UIImage imageNamed:@"Nofile.png"];



                NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
                };    



                    NSString *string ;

                     MyClass *obj = [imageFileNameArray objectAtIndex:j];

                    **//obj.fileName contains ALAsset URL of a Image**
                    string = obj.fileName;

                    NSURL *asseturl = [NSURL URLWithString:string];
                    ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
                  [assetslibrary assetForURL:asseturl                                      resultBlock:resultblock

                                                  failureBlock:failureblock];











       imageViewTopic.userInteractionEnabled = YES;


       imageViewTopic.frame = CGRectMake(0,0, 200, 150);


        [currentView addSubview:scroller];


         **// adding the imageView to View**
        [smallView addSubview:imageViewTopic];

        [myView addSubview:smallView];
             [scroller addSubview:myView];

      }

1 Ответ

0 голосов
/ 05 сентября 2012

Я использую этот метод для отображения изображений в режиме прокрутки с отложенной загрузкой. Хорошо работает.

Сначала инициализируйте значение j1. И данные - это данные изображения, поступающие из цикла из массива.

dispatch_async(dispatch_get_global_queue(0,0), ^{

             NSData * data = [[NSData alloc] initWithContentsOfURL:url];
             if ( data == nil )
                 return;
             dispatch_async(dispatch_get_main_queue(), ^{

                 __block int j1=_j;
                 // WARNING: is the cell still using the same data by this point??

                 //  NSURL *url = [NSURL URLWithString: imageName];
                 UIImage *image = [UIImage imageWithData: data]; //image.size.height
               image1=[[UIImageView alloc] initWithFrame:CGRectMake(j1,10,image.size.width,image.size.height)];

                 image1.image=image;

                 CALayer *layer = [image1 layer];
                 [layer setMasksToBounds:YES];
                 [layer setCornerRadius:0.0]; //note that when radius is 0, the border is a rectangle
                 [layer setBorderWidth:3.0];
                 [layer setBorderColor:[[UIColor whiteColor] CGColor]];


                 [portfolio_scroll addSubview:image1];

             }); 

         });
         _j = _j+ 320;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...