[英]Choppy Paging UIScrollView Experience
我有兴趣实现一个分页UIScrollView体验,非常类似于当前的Twitter应用程序,其中在视图层次结构的顶部有一个主要的分页UIScrollView(水平滚动),以及其他几个(垂直滚动)UIScrollViews或UITableViews作为分页UIScrollView的子视图。
我正在参考这个WWDC视频 ,他们描述了我们如何添加一个/几个“缩放”scrollViews作为更大的“分页”scrollView的子视图。
在我当前的设置中,我有:一个带有层次结构的Storyboard中的ViewController,如下所示:View> ScrollView(contentScrollView)>几个子视图(UIImageViews,UIButtons和UILabels)。
当加载该视图时,我在其viewDidAppear中调用方法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个UITableViews之间进行平移,我的第一个视图将是包含一些图像,标签和按钮的自定义视图,第二个和第三个页面将是UITableViews。
我创建了一个预期结果的模型
目前,我能够得到我想要的结果,但我意识到性能有一些不稳定。 我是通过为这么多视图分配内存而在这里做错了吗?
非常感谢!
如果在主线程上加载图像是问题,这里是一个在后台线程上加载图像的简单方法
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
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.