ios 7:谁能建议我实现新闻Feed类型滚动?

时间:2014-08-14 09:57:55

标签: ios

我正在使用各种社交媒体应用程序。在这里,我必须完成一项任务,例如在其他社交媒体应用程序(例如Facebook,Twitter)中提供新闻。

请为我提供有效使用滚动视图的最佳方式。它应该向上和向下滚动,我可能需要延迟加载以获得更好的用户体验

提前致谢

4 个答案:

答案 0 :(得分:2)

我使用UITableView创建了类似的东西。为了避免繁重的网络使用和较长的加载时间,我将10个帖子加载到表中。然后,当用户滚动到倒数第3个帖子时,它将另外10个加载到表中,所以当用户到达原始10个帖子的底部时,另外10个等待。

它是一种不错的流畅方法,也是Facebook和Twitter如何实现新闻提要的连续滚动。

你需要的所有方法都可以在iOS框架中获得,所以不要与第三方代码及其包含的错误作斗争!

答案 1 :(得分:1)

您可以使用UITableView。在这里,您可以将每个新闻Feed表示为tableview单元格。

对于延迟加载,请参阅apple's example

用于为表格视图单元格see this tutorial创建自定义视图。

希望这会有所帮助.. :)

答案 2 :(得分:1)

您可以使用UITableView / UICollectionView来显示您的数据。 对于加载,你应该看一下AFNetworking 2,这是一个简单的框架,有很多扩展用于延迟图像加载和异步请求。

https://github.com/AFNetworking/AFNetworking

希望这有帮助。

查看AFNetworking入门指南如何通过CocoaPod将AFNetworking安装到您的项目中。

所以,你的ViewController.m

// Import relevant Headers
#import "ViewController.h"
#import "AFNetworking.h"
#import "MyTableViewCell.h" // Custom TableViewCell
#import "UIImageView+AFNetworking.h"


@interface ViewController ()
@property (nonatomic, strong) NSArray *dataArray; // Array to store JSON - results
@end

@implementation ViewController
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self parseData];
}

- (void) parseData
{
    [self clearResults];

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    [manager GET:@"https://itunes.apple.com/lookup?amgArtistId=468749,5723&entity=song&limit=5&sort=recent" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        if (responseObject)
        {
            [self handleJson:responseObject];
        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if (error)
        {
            NSLog(@"error %@", error);
        }
    }];

}

- (void) handleJson:(NSDictionary *)dict
{
    self.dataArray = [dict objectForKey:@"results"];
    [self.tableView reloadData];
}

- (void) clearResults
{
    self.dataArray = nil;
    [self.tableView reloadData];
}


#pragma mark - TableViewDatasource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataArray count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    NSDictionary *dataDict = [self.dataArray objectAtIndex:indexPath.row];

    cell.artistLabel.text = [dataDict objectForKey:@"artistName"];
    [cell.thumbImageView cancelImageRequestOperation];

    NSURL *imageURL = [NSURL URLWithString:[dataDict objectForKey:@"artworkUrl100"]];

        // replace placeholderimage with something like [UIImage imageNamed:@"superPlaceholder.png"]
    [cell.thumbImageView setImageWithURL:imageURL placeholderImage:[UIImage new]];


    return cell;

}

小样本:)

答案 3 :(得分:0)

你必须使用UITableView。使用自定义tableViewCell创建表。您搜索教程以使用autolayout创建自定义UITableViewCell。 iOS隐式地为tableView提供兑现。如果表行超过100,您还应该实现额外的缓存架构。