繁体   English   中英

糟糕的分页UIScrollView体验

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM