Iphone 如何在iOS中的UIScrollView中显示多个图像

Iphone 如何在iOS中的UIScrollView中显示多个图像,iphone,imageview,scrollview,Iphone,Imageview,Scrollview,我正在制作一个iPhone应用程序,其中我需要在UIScrollView中显示一些图像,在左侧和右侧将有两个按钮,用户可以单击按钮,它将显示下一个或上一个图像。在底部还有一个按钮,当用户点击该按钮时,它将显示我们在scrollview中选择的图像。我想知道如何在scrollview中显示多个图像,同时选择底部按钮,如何找到scrollview中的图像。Apple.developer演示了如何使用嵌入式UIScrollView和CATiledLayer创建丰富的用户体验,用于显示和分页可以单独平移

我正在制作一个iPhone应用程序,其中我需要在UIScrollView中显示一些图像,在左侧和右侧将有两个按钮,用户可以单击按钮,它将显示下一个或上一个图像。在底部还有一个按钮,当用户点击该按钮时,它将显示我们在scrollview中选择的图像。我想知道如何在scrollview中显示多个图像,同时选择底部按钮,如何找到scrollview中的图像。

Apple.developer演示了如何使用嵌入式UIScrollView和CATiledLayer创建丰富的用户体验,用于显示和分页可以单独平移和缩放的照片


CATiledLayer用于提高高分辨率图像或大照片集的分页、平移和缩放性能。

请看以下示例: 你只要先 在运行时和图像上创建一个新视图,并为所有视图(如1000或100)指定标记和标记值上的增量,然后将此视图添加到scrollview和两个用于左右移动的按钮,并执行其出口操作,并将所有scrollview子视图添加到一个可变数组中,如下所示

     indexStart=100;
 UIView *AddView=[[UIView alloc]initWithFrame:CGRectMake(55, 0, 100, 100)];

                AddView.tag=indexStart;
                btnTap.tag=indexStart;

                UIImageView *imgview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];



                [AddView addSubview:imgview];

                imgview.image=image;
                imgview.tag=1000;
               [ScrollView addSubview:AddView];
                [imgArray addObject:AddView];
您可以使用loop来完成此操作,在左键和右键上使用此代码,在该代码中,editImgeView是位于左键和右键之间的图像视图,您可以在其中显示图像,您只需简单的indexstart++或--如果用户选择右键或左键

for (int index = 0; index < [imgAddArrayAfter count]; index ++ ) {
         NSLog(@"index %d",index);
        UIView *vc=[imgArray objectAtIndex:index];
        NSLog(@"view tag %d",vc.tag);
        if(vc.tag == indexStart)
        {

            UIImageView *modalView=(UIImageView *)  [vc viewWithTag:1000];
            editImgeView.image=modalView.image;
        }
    }
for(int index=0;index<[imgaddarayafter count];index++){
NSLog(@“索引%d”,索引);
UIView*vc=[imgaray objectAtIndex:index];
NSLog(@“视图标记%d”,vc.tag);
if(vc.tag==indexStart)
{
UIImageView*modalView=(UIImageView*)[vc视图带标记:1000];
editImgeView.image=modalView.image;
}
}

我希望你能理解;-)

来自danielbeard.wordpress.com的一个例子

如果您的图像名称不仅仅是数字:

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

    [scrollView setPagingEnabled:YES];
    [scrollView setAlwaysBounceVertical:NO];

    NSArray *imagesArray = [NSArray arrayWithObjects:@"img1.png", @"img2.png", @"img3.png", nil];

    for (int i = 0; i < [imagesArray count]; i++)
    {
        CGFloat xOrigin = i * scrollView.frame.size.width;

        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
        [imageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:i]]];
        [imageView setContentMode:UIViewContentModeScaleAspectFit];

        [scrollView addSubview:imageView];
    }

    [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width * [imagesArray count], scrollView.frame.size.height)];
UIScrollView*scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
[滚动视图设置分页启用:是];
[滚动视图设置AlwaysBounceVertical:否];
NSArray*imagesArray=[NSArray阵列,其对象为:@“img1.png”、“img2.png”、“img3.png”、nil];
对于(int i=0;i<[imagesArray计数];i++)
{
CGFloat xOrigin=i*scrollView.frame.size.width;
UIImageView*imageView=[[UIImageView alloc]initWithFrame:CGRectMake(xOrigin,0,scrollView.frame.size.width,scrollView.frame.size.height)];
[imageView setImage:[UIImage IMAGENAME:[imagesArray objectAtIndex:i]];
[图像视图设置内容模式:UIViewContentModeScaleSpectFit];
[滚动视图添加子视图:图像视图];
}
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width*[imagesArray count],scrollView.frame.size.height)];
-(无效)视图加载
{
[超级视图下载];
UIScrollView*scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
scrollView.contentSize=CGSizeMake(320465);
[滚动视图设置可滚动:是];
[滚动视图设置分页启用:是];
[滚动视图设置AlwaysBounceVertical:否];
[self.view addSubview:scrollView];
NSMutableArray*arrImage=[NSMutableArray数组,其对象为:@“food1.jpeg”、“food2.jpeg”、“food3.jpeg”、“food4.jpeg”、“food5.jpeg”、“food6.jpeg”、“food7.jpeg”、“food8.jpeg”、“food9.jpeg”、“food10.jpeg”、“food11.jpeg”、“food12.jpeg”、“food13.jpeg”、“food14.jpeg”、“food16”);
对于(int i=0;i<[arrImage count];i++)
{
CGFloat xOrigin=i*scrollView.frame.size.width;
UIImageView*imageView=[[UIImageView alloc]initWithFrame:CGRectMake(xOrigin,0,scrollView.frame.size.width,scrollView.frame.size.height)];
[imageView setImage:[UIImage IMAGENAME:[arrImage objectAtIndex:i]];
[图像视图设置内容模式:UIViewContentModeScaleSpectFit];
[滚动视图添加子视图:图像视图];
}
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width*[arrImage count],scrollView.frame.size.height)];
}

我知道这个线程很旧,但我认为在滚动视图中加载大量图像的问题仍然存在。如果要在滚动视图中加载图像,将面临内存使用问题。这些图像很可能会占用设备的大部分内存。唯一的方法是创建可重复使用的滚动视图,其工作方式类似于uitableview,即具有可显示的视图池(带有图像)的滚动视图。这可能是相当复杂的创建

我创建了一个开源项目,以支持在滚动视图中可重用地加载图像。它很容易实现。您需要调用两个委托和数据源方法,仅此而已。为了便于理解,还有obj-c和swift的示例项目。请随时投稿。我希望它会有用


这里有一个来源:

似乎得到了直接的代码?你做过并做过吗?哦…这一个完全解决了问题,而且+1!我这样做了,在肖像模式下效果很好。但是,如果我有不同的图像阵列,如何在横向模式下执行呢。?请给出一些建议。你应该检测屏幕何时旋转到横向模式。一旦检测到,请更改图像数组中的图像名称,然后删除旧的滚动视图,并使用新的图像数组绘制一个新的滚动视图。无论如何,感谢您的回复。您能指导我删除特定的UIImageView吗?@CodeHunter创建的ImageView数量取决于imagesArray(包含图像名称)。因此,请从数组中删除不需要的图像名称。
- (void)viewDidLoad
{
    [super viewDidLoad];
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    scrollView.contentSize = CGSizeMake(320, 465);

    [scrollView setScrollEnabled:YES];
    [scrollView setPagingEnabled:YES];
    [scrollView setAlwaysBounceVertical:NO];
    [self.view addSubview:scrollView];

    NSMutableArray *arrImage = [NSMutableArray arrayWithObjects:@"food1.jpeg", @"food2.jpeg", @"food3.jpeg",@"food4.jpeg", @"food5.jpeg", @"food6.jpeg",@"food7.jpeg", @"food8.jpeg", @"foo9.jpeg",@"food10.jpeg", @"food11.jpeg", @"food12.jpeg",@"food13.jpeg", @"food14.jpeg", @"food15.jpeg", @"food16.jpeg", nil];

    for (int i = 0; i < [arrImage count]; i++)
    {
        CGFloat xOrigin = i * scrollView.frame.size.width;

        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
        [imageView setImage:[UIImage imageNamed:[arrImage objectAtIndex:i]]];
        [imageView setContentMode:UIViewContentModeScaleAspectFit];

        [scrollView addSubview:imageView];
    }

    [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width * [arrImage count], scrollView.frame.size.height)];
}