Ios 断断续续的浏览体验

Ios 断断续续的浏览体验,ios,iphone,objective-c,uitableview,uiscrollview,Ios,Iphone,Objective C,Uitableview,Uiscrollview,我感兴趣的是实现分页UIScrollView体验,这与当前的Twitter应用非常相似,其中在视图层次结构的顶部有一个主分页UIScrollView(水平滚动),还有几个其他(垂直滚动)UIScrollView或UITableView作为分页UIScrollView的子视图 我参考了他们描述的如何添加一个/多个“缩放”滚动视图作为更大的“分页”滚动视图的子视图 在我当前的设置中,我有: 故事板中的ViewController,其层次结构如下:视图>滚动视图(contentScrollView)

我感兴趣的是实现分页UIScrollView体验,这与当前的Twitter应用非常相似,其中在视图层次结构的顶部有一个主分页UIScrollView(水平滚动),还有几个其他(垂直滚动)UIScrollView或UITableView作为分页UIScrollView的子视图

我参考了他们描述的如何添加一个/多个“缩放”滚动视图作为更大的“分页”滚动视图的子视图


在我当前的设置中,我有: 故事板中的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个滚动视图而不抖动。。。不幸的是,我不确定问题可能是什么,可能是应用程序中的其他地方发生了影响此视图的事件?