在ScrollView中显示图像

时间:2015-11-06 11:52:30

标签: ios objective-c

我想在滚动视图中显示一些图像,但我遇到了一些问题。

这就是我所拥有的:

- (void)viewDidLoad
{
    [super viewDidLoad];

    myObject = [[NSMutableArray alloc] init];

    [myObject addObject:@"tut_5.jpg"];
    [myObject addObject:@"tut_2.jpg"];
    [myObject addObject:@"tut_3.jpg"];
    [myObject addObject:@"tut_4.jpg"];

    pageControlBeingUsed = NO;


    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    CGFloat screenHight = screenRect.size.height;

    for (int i = 0; i < [myObject count]; i++) {
        CGRect frame;
        frame.origin.x = self.takeTourScrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.takeTourScrollView.frame.size;

        NSString *val = [myObject objectAtIndex:i];


        UIImage* theImage = [UIImage imageNamed:val];


        UIImageView *img=[[UIImageView alloc] initWithFrame:CGRectMake(screenWidth*i,0,185 ,284)];


        img.image = theImage;

        [self.takeTourScrollView addSubview:img];

    }

第一张第一张图片似乎还可以。

enter image description here

然后当我向左滑动时,我得到一个空白的屏幕

enter image description here

我再次向左滑动,然后我看到了我的第二张照片。对于所有4张图像都是如此。

任何想法我做错了什么?

3 个答案:

答案 0 :(得分:3)

我建议您使用UITableView / UICollectionView来表示此类行为。您可以在每个单元格中设置图像,它们将被重用 - 在内存管理方面会更好。

tableView将顺便将所有元素放在适当的位置(您只需要定义单元格或布局的高度)。

它还可以适当调整事件大小(例如电话轮换)。

此外,您应该尽量避免对大小进行硬编码:

CGRectMake(screenWidth*i,0,185 ,284)

如果设备较小/较大,您将失败。一段时间后维护代码会很痛苦。

- 编辑 -

在@Duncan C发布他的回答后,我注意到你正在寻找一个寻呼系统。您可以在UIPageViewControllerUICollectionView上构建自己的解决方案。但是你也可以使用第三方库,我真的很喜欢这个:https://www.cocoacontrols.com/controls/bwwalkthrough。它支持不同的动画,为你做了很多事情:)。

答案 1 :(得分:3)

有些系统组件可以为您提供您想要的工作,而且工作量更少,用户体验更精致。正如Vive在她的回答中提到的那样,使用UICollectionView是一种可能性。我的建议是UIPageViewController。 Apple提供了一个名为PhotoScroller的示例应用程序,它展示了如何像您描述的那样实现UI。在Xcode文档中搜索&#34; PhotoScroller&#34;找到它。

答案 2 :(得分:0)

您已经设置了uiscrollview的x位置。不需要设置UIImageView的x位置。因为你使用imageview作为uiimagescrollview的子视图。 将此行更改为

UIImageView *img=[[UIImageView alloc] initWithFrame:CGRectMake(screenWidth*i,0,185 ,284)];

UIImageView *img=[[UIImageView alloc] initWithFrame:CGRectMake(0,0,185 ,284)];