0

好吧,这是我现在常用的域,我已经管理了一些功能,但我需要让它变得更好。

我正在尝试从相机胶卷中填充最近的图像。我很确定有更优雅的方法可以做到这一点。让我不安的另一件事是,这是

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);
                             }];

另外,我如何使图像进行延迟加载。我暂时禁用了分页,并且所有图像同时加载,这在大多数情况下是危险的。

4

1 回答 1

1

实际上,您应该为此目的使用NSOperationNSOperationQueueGCD类,或者也可以用于相同目的。但是,如果您查看相应 Classes 的指南参考,您会发现Classes 具有与GCDNSOperation and NSOperation 可比的高级灵活性。在这里,我将为您提供一些教程参考,您可以在其中了解如何有效地使用这些提到的有用类来实现此类目的。

这是本教程作者中 NSOperation 的链接,其中详细提到了 evreything,我敢肯定,如果您研究NSOperation 和 NsoperationQueue 在执行相同任务(即有效地在后台下载图像或从摄像头获取图像)中的使用,它会真的对您有所帮助。

这是 GCD 的教程。

在这里,我想告诉你,为什么我给你这些教程参考,因为这些教程在非常有效地实现这样的事情方面提供了很多帮助。

嘿 朋友 试着从上面得到一些点,这里我只是介绍了我的经验。你如何看待我的参考。

如果您从上面得到任何想法,我会感到很高兴。

编辑:朋友不要忘记您的要求中最重要的部分,这可能是您的类(UIScrollView)的最小内存占用。想一想,假设相机中有这么多图像,并且您确实需要获取所有图像,就数字而言可能有数百个,假设您要在 UIImageView 上显示这些图像。这里你需要做 遵循的概念Infinite ScrollView(只创建三个 mainView 只是刷新这些 mainView 上的数据)。即只创建三个mainView view1(这将被视为右视图),view2(将被视为中心)和View3(似乎是左视图)。您需要以这样的方式编写代码,您只需要这些视图来分配和添加这三个视图上的所有 UIImageViews。您需要使用委托UIScrollView用于管理所有这些事情。在这里我只给出了逻辑,你必须仔细阅读它,甚至我强迫你应该在你的应用程序中遵循这个东西,但是为了高速应用程序你应该考虑它。您可以在互联网上针对相同的逻辑进行许多线程,并且可以找到许多有关此逻辑的教程。如果您不能这样做,请不要试图责怪我,在这里我给出了我对更好发展的看法。

我希望你能理解我的观点。

于 2013-05-19T09:48:59.703 回答