2015-11-06 106 views
1

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

以下是我有:

- (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

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

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

它也将正确调整事件(例如电话轮换)。

此外,你应该尽量避免硬编码的大小:

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

您将在小/大设备的情况下失败。在一段时间后维护代码将是一件很痛苦的事情。

- 编辑 -

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

3

有一些系统组件可以为您提供您想要的更少的工作和更精致的用户体验。 Vive在她的回答中提到,使用UICollectionView是一种可能性。我的建议是UIPageViewController。有一个来自Apple的示例应用程序PhotoScroller,它显示了如何实现非常类似于您所描述的UI的UI。在Xcode文档中搜索“PhotoScroller”以查找它。

+0

+1其实如果OP想要的东西就像一个寻呼系统,使用'UIPageViewController'比我的解决方案更好的主意。 – Vive

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