从 ALAssetLibrary 为启用分页的 UIScrollView 添加多个 UIImages

Posted

技术标签:

【中文标题】从 ALAssetLibrary 为启用分页的 UIScrollView 添加多个 UIImages【英文标题】:Adding multiple UIImages for Paging Enabled UIScrollView from ALAssetLibrary 【发布时间】:2015-08-20 10:26:53 【问题描述】:

从 ALAssetLibrary 获取图像后,我在显示图像时遇到问题。我的问题是,如果有一个图像,那么它会很好,但如果有多个图像,那么最后一个图像只会出现,而不是之前的图像。我发现循环中存在问题,找不到是否。

如果有人解决了这个问题,请告诉我。

mainScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 70, self.view.frame.size.width, self.view.frame.size.height)];

mainScrollView.pagingEnabled = YES;

mainScrollView.delegate=self;
mainScrollView.showsHorizontalScrollIndicator = NO;
mainScrollView.showsVerticalScrollIndicator = NO;

CGRect innerScrollFrame = mainScrollView.bounds;

for (NSInteger i = 0; i < images.count; i++) 

    imageForZooming=[[UIImageView alloc]init];

    if ([maincheck isEqualToString:@"YES"]) 
        NSURL*url=[NSURL URLWithString:[images objectAtIndex:i]];

        [library assetForURL:url resultBlock:^(ALAsset *asset)
         
             UIImage  *copyOfOriginalImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
             [imageForZooming setImage:copyOfOriginalImage];
         
            failureBlock:^(NSError *error)
         
             NSLog(@"the error is %@",error);
         ];
    

    else
        [imageForZooming setImageWithURL:[NSURL URLWithString:[images objectAtIndex:i]]];
    

    UITapGestureRecognizer*t=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(showblack:)];

    t.numberOfTapsRequired=1;

    imageForZooming.userInteractionEnabled=YES;

    [imageForZooming addGestureRecognizer:t];

    imageForZooming.frame=CGRectMake(0, 50, 320, 200);

    imageForZooming.contentMode=UIViewContentModeScaleAspectFit;

    imageForZooming.tag = VIEW_FOR_ZOOM_TAG;

    pageScrollView = [[UIScrollView alloc] initWithFrame:innerScrollFrame];
    pageScrollView.minimumZoomScale = 1.0f;
    pageScrollView.maximumZoomScale = 4.5f;
    pageScrollView.zoomScale = 1.0f;
    pageScrollView.contentSize = imageForZooming.bounds.size;
    pageScrollView.delegate = self;
    pageScrollView.showsHorizontalScrollIndicator = NO;
    pageScrollView.showsVerticalScrollIndicator = NO;

    [pageScrollView addSubview:imageForZooming];

    [mainScrollView addSubview:pageScrollView];

    if (i < images.count-1) 
        innerScrollFrame.origin.x += innerScrollFrame.size.width;
    


mainScrollView.contentSize = CGSizeMake(innerScrollFrame.origin.x + innerScrollFrame.size.width,mainScrollView.bounds.size.height);

[self.view addSubview:mainScrollView];

【问题讨论】:

【参考方案1】:

这里你没有设置滚动视图的内容大小。

[scrollView setContentSize:CGSizeMake(numberOfImages * scrollView.frame.size.width, scrollView.frame.size.width)];

在添加到 scrollView 之前,您还必须更改每个 imageView 的 X 偏移量(如果是水平滚动)。

另外,您没有在此处将 imageForZooming 添加到任何滚动视图。

查看here 以从 ALAssetLibrary 加载图像。

【讨论】:

我设置了 Scrollview 的 contentSize,它适用于 Scroll View 的宽度,但图像没有出现在上面。使用 ALAssetLibrary 代码时唯一的问题。Else 条件适用于多个图像.但不是与 ASSetLibrary 条件。 请检查编辑后的代码,让我知道是什么问题。 您是说“如果您使用 ALAssetLibrary 并且所有图像都在其他条件下显示,则仅显示最后一张图像?” 我发现 ALAssetLybrary 正在异步工作,似乎这里缺少一些东西,无法将图像正确添加到 imageforZooming 对象。 是的,我的问题就是你所说的。

以上是关于从 ALAssetLibrary 为启用分页的 UIScrollView 添加多个 UIImages的主要内容,如果未能解决你的问题,请参考以下文章

启用分页的 UISCrollview

在启用分页的情况下使用 UIScrollView

在启用本机分页的情况下查看 UICollectionView 中的上一个/下一个单元格?

在启用分页的情况下将表格视图添加到滚动视图。

如何在启用分页的情况下实现 UIScrollView 平铺?

如何在启用分页的 UIScrollView 中延迟加载 100 多个页面?