如何通过按图像保存在 NSArray 中的顺序单击缩略图来在滚动视图中打开图像?

Posted

技术标签:

【中文标题】如何通过按图像保存在 NSArray 中的顺序单击缩略图来在滚动视图中打开图像?【英文标题】:How to Open the Image in scrollview by clicking on the thumbnail in the order the image are saved in the NSArray? 【发布时间】:2013-03-14 05:17:14 【问题描述】:

在我的应用程序中,我有缩略图视图,我希望用户使用 imageview 转到下一个视图并显示单击的特定缩略图。但是此图像视图通过分页和 UIPagecontrol 附加到 UIScroll。所以我希望打开特定的图像并在特定的索引处,以便用户可以向左或向右滑动以查看其他图像。这需要与 iPhone 的照片应用完全一样。

我该如何解决这个问题?

我的代码是,

collectionview.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    if ([[segue identifier] isEqualToString:@"showDetail"])
    
        NSIndexPath *selectedIndexPath = [[self.gallerycollection indexPathsForSelectedItems] objectAtIndex:0];

        // load the image, to prevent it from being cached we use 'initWithContentsOfFile'
        NSString *imageNameToLoad = [NSString stringWithFormat:@"interior_%d", selectedIndexPath.row];
        NSString *pathToImage = [[NSBundle mainBundle] pathForResource:imageNameToLoad ofType:@"jpg"];
        UIImage *image = [[UIImage alloc] initWithContentsOfFile:pathToImage];

        GalleryImageScrollViewController *gallerydetailViewController = [segue destinationViewController];
        gallerydetailViewController.FullScreenImageScroller=image ;
    

GalleryImageScrollViewcontroller.m

- (void)viewDidLoad

    [super viewDidLoad];


    NSMutableArray *mutablearray = [NSMutableArray array];
    data=[MyDatabase new];
    slideImages=[data OpenMyDatabase:@"SELECT pic_name_big FROM interior":@"pic_name_big"];
    [mutablearray addObjectsFromArray:slideImages];
    temparr = [[NSMutableArray alloc]init];
    temparr=[NSMutableArray arrayWithArray:mutablearray];
        [self putImageViewsInScrollView:[temparr count]];





-(void) putImageViewsInScrollView:(int)numberOfImageViews

   for(int i=0 ;i<= numberOfImageViews; i++)
    
       // UIImageView *fullScreenImageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:[temparr objectAtIndex:i]]];
        fullScreenImageView.frame = CGRectMake((WIDTH_OF_IMAGE * i)  , 0, WIDTH_OF_IMAGE, HEIGHT_OF_IMAGE);
        [self.FullScreenImageScroller addSubview:fullScreenImageView];

    

    [self.FullScreenImageScroller setContentSize:CGSizeMake(WIDTH_OF_SCROLL_PAGE * ([temparr count]), HEIGHT_OF_IMAGE)];
    [self.FullScreenImageScroller setContentOffset:CGPointMake(0, 0)];
    [self.FullScreenImageScroller scrollRectToVisible:CGRectMake(WIDTH_OF_IMAGE,0,WIDTH_OF_IMAGE,HEIGHT_OF_IMAGE) animated:NO];
    self.FullScreenImageScroller.delegate=self;

   

【问题讨论】:

【参考方案1】:

这会有所帮助

KTPhotoBrowser

TTThumbs

【讨论】:

【参考方案2】:

您可以使用 Three20 库或 Apple 的 UICatalog 示例作为参考。以下是链接:

https://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html

https://github.com/facebook/three20

【讨论】:

【参考方案3】:

您可以在第一次将图像添加到缩略图时将数组中图像的索引映射到缩略图视图的“标签”

ThumbnailView *thumb = [UIView alloc] init];
thumb.image = [imagesArray objectAtIndex:i];
thumb.tag = i;

在选择缩略图视图时,您可以根据标签从数组中获取图像

UIImage *image = [imagesArray objectAtIndex:thumb.tag];

【讨论】:

我应该把这个语句放在哪里 UIImage *image = [imagesArray objectAtIndex:thumb.tag]; ? 只要您想根据缩略图视图上的操作使用图像。根据您的描述,我会说当点击缩略图视图并且您想全屏打开图像时。 @ahemd:我如何使用 segues 实现这一点?有什么想法吗?【参考方案4】:

试试这样可能行得通

1.for thumbnail image 给 image.tag 值,当你点击你的缩略图时,将该标签值传递给下一个视图控制器(detailviewControllerObj.index=image.tag)。

2.将所有全屏图像(尺寸 320*480)添加到详细页面的滚动视图,并将该滚动视图添加到视图。

3.当您点击缩略图时,您可以将索引值传递到详细屏幕。

4.之后设置滚动视图内容偏移在详细屏幕中。

[scroll setContentOffset:CGPointMake(320*index, 0)];

当你在那个时候创建​​缩略图时,给个赞

for(int i=0;i<[imgarr count];i++)

    UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
    imageView.image=[imgarr objectAtIndex:i];
    imageView.tag=i;
    [self.view addSubview:imageView];

在详细视图之后,将一个整数值作为索引并合成该变量 当您单击该特定图像时,会像这样

detailviewControllerObj.index=image.tag

【讨论】:

以上是关于如何通过按图像保存在 NSArray 中的顺序单击缩略图来在滚动视图中打开图像?的主要内容,如果未能解决你的问题,请参考以下文章

NSArray 的值,希望按字母顺序显示在部分中。如何分配到正确的部分?

如何像用户单击一样单击 HTML 按钮

如何将 NSArray 拆分为按字母顺序排列的部分以与索引表视图一起使用

如何在Angular中按顺序处理2个点击事件

位图文件未按正确的顺序保存在内存中

调整 UINavigationController ViewControllers NSArray 的顺序