Ios 断断续续的浏览体验
我感兴趣的是实现分页UIScrollView体验,这与当前的Twitter应用非常相似,其中在视图层次结构的顶部有一个主分页UIScrollView(水平滚动),还有几个其他(垂直滚动)UIScrollView或UITableView作为分页UIScrollView的子视图 我参考了他们描述的如何添加一个/多个“缩放”滚动视图作为更大的“分页”滚动视图的子视图Ios 断断续续的浏览体验,ios,iphone,objective-c,uitableview,uiscrollview,Ios,Iphone,Objective C,Uitableview,Uiscrollview,我感兴趣的是实现分页UIScrollView体验,这与当前的Twitter应用非常相似,其中在视图层次结构的顶部有一个主分页UIScrollView(水平滚动),还有几个其他(垂直滚动)UIScrollView或UITableView作为分页UIScrollView的子视图 我参考了他们描述的如何添加一个/多个“缩放”滚动视图作为更大的“分页”滚动视图的子视图 在我当前的设置中,我有: 故事板中的ViewController,其层次结构如下:视图>滚动视图(contentScrollView)
在我当前的设置中,我有: 故事板中的ViewController,其层次结构如下:视图>滚动视图(contentScrollView)>多个子视图(UIImageView、UIButtons和UILabel) 加载该视图时,我在其视图中调用方法
setupPagingScrollView
方法
- (void)setupPagingScrollView
{
// Setup the PAGING UIScrollView
self.pagingScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 340, self.view.frame.size.height)];
self.pagingScrollView.contentSize = CGSizeMake(680, self.view.frame.size.height);
self.pagingScrollView.pagingEnabled = YES;
self.pagingScrollView.backgroundColor = [UIColor blackColor];
// Remove the CONTENT UIScrollView (from storyboard) from the view.
// Add the CONTENT UIScrollView (from storyboard), as a subview of the newly created PAGING UIScrollView
[self.contentScrollView removeFromSuperview];
[self.pagingScrollView addSubview:self.contentScrollView];
[self.view addSubview:self.pagingScrollView];
// Create the 2nd page, which is a UITableView
self.tableView = ({
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(340, 0, 320, self.view.frame.size.height) style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
tableView.backgroundColor = [UIColor whiteColor];
tableView.tableFooterView = [UIView new];
tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
tableView;
});
[self.pagingScrollView addSubview:self.tableView];
// UINavigationBar for the UITableView in the 2nd page.
self.likesCommentsNavBar = ({
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(340, 0, 320, 44)];
UINavigationItem *navItem = [[UINavigationItem alloc] init];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:@[@"Likes", @"Comments"]];
[segmentedControl addTarget:self action:@selector(toggleLikesCommentsWithSegmentedControl:) forControlEvents:UIControlEventValueChanged];
segmentedControl.selectedSegmentIndex = 0;
navItem.titleView = segmentedControl;
navBar.items = @[navItem];
navBar;
});
[self.pagingScrollView addSubview:self.likesCommentsNavBar];\
}
我预期的最终结果类似于twitter应用程序,只是我的第一个视图不是在3个UITableView之间平移,而是一个带有一些图像、标签和按钮的自定义视图,第二个和第三个页面是UITableView 我已经为我的预期结果创建了一个模型 目前,我能够得到我想要的结果,但我意识到在表演中有一些起伏。我把内存分配给这么多视图或其他东西,这是不是做错了什么
非常感谢 如果在主线程上加载图像是这里的问题,这里有一种在背景线程上加载图像的简单方法
UIImageView *imageView = [[UIImageView alloc] init]; // can be your IBOutlet or something instead
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [UIImage imageNamed:@"imageName"];
dispatch_sync(dispatch_get_main_queue(), ^{
imageView.image = image; //can add some fade in animation or something here too
});
});
滚动时加载的图像可能是罪魁祸首(如果确实发生了这种情况),加载图像时,您可以将其加载到后台线程,然后在主线程上显示它们,以便在加载图像时不会阻止UI线程,不确定这是否是你问题的真正原因,但我以前遇到过这个问题,它使我的滚动体验更加流畅。你有更多的代码用于这个例子吗?我对twitter应用程序很感兴趣。Thanks@Pyraego.com我意识到,让一切变得波涛汹涌的是像斯纳瓦尔一样的自我。我赞扬了那一块,表演恢复了正常。我不知道为什么。嗨@Fonix,实际上,我不确定图像加载是否是问题所在。即使UITableView(不在视图中)的数据源为空,性能也会降低。第一个自定义UIScrollView上的UIImageView本身只有一个图像,并且只加载一次。事实上,我认为这是因为我正在为3个UIScrollView分配内存,这不是一个好主意,因为其他2个滚动视图还没有显示在视图中。奇怪的是,该设备应该能够轻松处理3个滚动视图而不抖动。。。不幸的是,我不确定问题可能是什么,可能是应用程序中的其他地方发生了影响此视图的事件?