我想在滚动视图中显示一些图像,但我遇到了一些问题。
这就是我所拥有的:
- (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];
}
第一张第一张图片似乎还可以。
然后当我向左滑动时,我得到一个空白的屏幕
我再次向左滑动,然后我看到了我的第二张照片。对于所有4张图像都是如此。
任何想法我做错了什么?
答案 0 :(得分:3)
我建议您使用UITableView
/ UICollectionView
来表示此类行为。您可以在每个单元格中设置图像,它们将被重用 - 在内存管理方面会更好。
tableView将顺便将所有元素放在适当的位置(您只需要定义单元格或布局的高度)。
它还可以适当调整事件大小(例如电话轮换)。
此外,您应该尽量避免对大小进行硬编码:
CGRectMake(screenWidth*i,0,185 ,284)
如果设备较小/较大,您将失败。一段时间后维护代码会很痛苦。
- 编辑 -
在@Duncan C发布他的回答后,我注意到你正在寻找一个寻呼系统。您可以在UIPageViewController
或UICollectionView
上构建自己的解决方案。但是你也可以使用第三方库,我真的很喜欢这个: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)];