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

还有我如何使图像做延迟加载。我现在禁用了分页,所有图像同时加载,这在大多数情况下是危险的。

实际上您应该为此目的使用NSOperation和NSOperationQueueClass,或者也可以使用GCD。但是如果你查看相应类的指南参考,你会发现NSOperation and NSOperation类具有与GCD相似的高水平灵活性。在这里,我将给你一些参考教程,在那里你可以得到如何有效地使用这些有用的类的想法。

这里是NSOperation的链接在本教程中作者提到了很多细节,我很确定它会真正帮助你,如果你看看NSOperation和NsoperationQueue在做同样的任务,即下载图像或在后台从相机获取图像。

这是GCD的教程。

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

嘿,朋友试着从上面得到一些点,在这里我只介绍我的经验。如何接受我的推荐信由你决定。

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

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

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

最新更新