| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- //
- // T1HomeTimelineItemsViewController.m
- // YYKitExample
- //
- // Created by ibireme on 15/10/9.
- // Copyright (C) 2015 ibireme. All rights reserved.
- //
- #import "T1HomeTimelineItemsViewController.h"
- #import "T1StatusLayout.h"
- #import "T1StatusCell.h"
- #import "YYTableView.h"
- #import "YYFPSLabel.h"
- #import "YYPhotoGroupView.h"
- #import "YYSimpleWebViewController.h"
- @interface T1HomeTimelineItemsViewController() <UITableViewDelegate, UITableViewDataSource, T1StatusCellDelegate>
- @property (nonatomic, strong) NSMutableArray *layouts;
- @property (nonatomic, strong) UITableView *tableView;
- @property (nonatomic, strong) YYFPSLabel *fpsLabel;
- @end
- @implementation T1HomeTimelineItemsViewController
- - (instancetype)init {
- self = [super init];
- _tableView = [YYTableView new];
- _tableView.delegate = self;
- _tableView.dataSource = self;
- return self;
- }
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- self.view.backgroundColor = [UIColor whiteColor];
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.view.backgroundColor = [UIColor colorWithWhite:1.000 alpha:0.919];
-
- if ([self respondsToSelector:@selector( setAutomaticallyAdjustsScrollViewInsets:)]) {
- self.automaticallyAdjustsScrollViewInsets = NO;
- }
-
- _tableView.frame = self.view.bounds;
- _tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
- _tableView.scrollIndicatorInsets = _tableView.contentInset;
- _tableView.backgroundColor = [UIColor clearColor];
- _tableView.backgroundView.backgroundColor = [UIColor clearColor];
- [self.view addSubview:_tableView];
-
- _fpsLabel = [YYFPSLabel new];
- [_fpsLabel sizeToFit];
- _fpsLabel.bottom = self.view.height - kT1CellPadding;
- _fpsLabel.left = kT1CellPadding;
- _fpsLabel.alpha = 0;
- [self.view addSubview:_fpsLabel];
-
- if (kSystemVersion < 7) {
- _fpsLabel.top -= 44;
- _tableView.top -= 64;
- _tableView.height += 20;
- }
-
-
-
-
- self.navigationController.view.userInteractionEnabled = NO;
- UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
- indicator.size = CGSizeMake(80, 80);
- indicator.center = CGPointMake(self.view.width / 2, self.view.height / 2);
- indicator.backgroundColor = [UIColor colorWithWhite:0.000 alpha:0.670];
- indicator.clipsToBounds = YES;
- indicator.layer.cornerRadius = 6;
- [indicator startAnimating];
- [self.view addSubview:indicator];
-
-
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- NSMutableArray *layouts = [NSMutableArray new];
- for (int i = 0; i <= 3; i++) {
- NSData *data = [NSData dataNamed:[NSString stringWithFormat:@"twitter_%d.json",i]];
- T1APIRespose *response = [T1APIRespose modelWithJSON:data];
- for (id item in response.timelineItmes) {
- if ([item isKindOfClass:[T1Tweet class]]) {
- T1Tweet *tweet = item;
- T1StatusLayout *layout = [T1StatusLayout new];
- layout.tweet = tweet;
- [layouts addObject:layout];
- } else if ([item isKindOfClass:[T1Conversation class]]) {
- T1Conversation *conv = item;
- NSMutableArray *convLayouts = [NSMutableArray new];
- for (T1Tweet *tweet in conv.tweets) {
- T1StatusLayout *layout = [T1StatusLayout new];
- layout.conversation = conv;
- layout.tweet = tweet;
- [convLayouts addObject:layout];
- }
- if (conv.targetCount > 0 && convLayouts.count >= 2) {
- T1StatusLayout *split = [T1StatusLayout new];
- split.conversation = conv;
- [split layout];
- [convLayouts insertObject:split atIndex:1];
- }
- [layouts addObjectsFromArray:convLayouts];
- }
- }
- }
-
- dispatch_async(dispatch_get_main_queue(), ^{
- self.title = [NSString stringWithFormat:@"Twitter (loaded:%d)", (int)layouts.count];
- [indicator removeFromSuperview];
- self.navigationController.view.userInteractionEnabled = YES;
- self.layouts = layouts;
- [_tableView reloadData];
- });
- });
-
- }
- - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
- if (_fpsLabel.alpha == 0) {
- [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
- _fpsLabel.alpha = 1;
- } completion:NULL];
- }
- }
- - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
- if (!decelerate) {
- if (_fpsLabel.alpha != 0) {
- [UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
- _fpsLabel.alpha = 0;
- } completion:NULL];
- }
- }
- }
- - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
- if (_fpsLabel.alpha != 0) {
- [UIView animateWithDuration:1 delay:2 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
- _fpsLabel.alpha = 0;
- } completion:NULL];
- }
- }
- - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
- if (_fpsLabel.alpha == 0) {
- [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
- _fpsLabel.alpha = 1;
- } completion:^(BOOL finished) {
- }];
- }
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- return _layouts.count;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- NSString *cellID = @"cell";
- T1StatusCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
- if (!cell) {
- cell = [[T1StatusCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
- cell.delegate = self;
- }
- [cell setLayout:_layouts[indexPath.row]];
- return cell;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
- return ((T1StatusLayout *)_layouts[indexPath.row]).height;
- }
- - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
- return NO;
- }
- #pragma mark - T1StatusCellDelegate
- - (void)cell:(T1StatusCell *)cell didClickInLabel:(YYLabel *)label textRange:(NSRange)textRange {
- YYTextHighlight *highlight = [label.textLayout.text attribute:YYTextHighlightAttributeName atIndex:textRange.location];
- NSDictionary *info = highlight.userInfo;
- NSURL *link = nil;
- NSString *linkTitle = nil;
- if (info[@"T1URL"]) {
- T1URL *url = info[@"T1URL"];
- if (url.expandedURL.length) {
- link = [NSURL URLWithString:url.expandedURL];
- linkTitle = url.displayURL;
- }
- } else if (info[@"T1Media"]) {
- T1Media *media = info[@"T1Media"];
- if (media.expandedURL.length) {
- link = [NSURL URLWithString:media.expandedURL];
- linkTitle = media.displayURL;
- }
- }
- if (link) {
- YYSimpleWebViewController *vc = [[YYSimpleWebViewController alloc] initWithURL:link];
- vc.title = linkTitle;
- [self.navigationController pushViewController:vc animated:YES];
- }
- }
- - (void)cell:(T1StatusCell *)cell didClickImageAtIndex:(NSUInteger)index withLongPress:(BOOL)longPress {
- if (longPress) {
- // show alert
- return;
- }
- UIImageView *fromView = nil;
- NSMutableArray *items = [NSMutableArray new];
- NSArray<T1Media *> *images = cell.layout.images;
-
- for (NSUInteger i = 0, max = images.count; i < max; i++) {
- UIImageView *imgView = cell.statusView.mediaView.imageViews[i];
- T1Media *img = images[i];
- YYPhotoGroupItem *item = [YYPhotoGroupItem new];
- item.thumbView = imgView;
- item.largeImageURL = img.mediaLarge.url;
- item.largeImageSize = img.mediaLarge.size;
- [items addObject:item];
- if (i == index) {
- fromView = imgView;
- }
- }
-
- YYPhotoGroupView *v = [[YYPhotoGroupView alloc] initWithGroupItems:items];
- [v presentFromImageView:fromView toContainer:self.navigationController.view animated:YES completion:nil];
- }
- - (void)cell:(T1StatusCell *)cell didClickQuoteWithLongPress:(BOOL)longPress {
-
- }
- - (void)cell:(T1StatusCell *)cell didClickAvatarWithLongPress:(BOOL)longPress {
-
- }
- - (void)cell:(T1StatusCell *)cell didClickContentWithLongPress:(BOOL)longPress {
-
- }
- - (void)cellDidClickReply:(T1StatusCell *)cell {
-
- }
- - (void)cellDidClickRetweet:(T1StatusCell *)cell {
- T1StatusLayout *layout = cell.layout;
- T1Tweet *tweet = layout.displayedTweet;
- if (tweet.retweeted) {
- tweet.retweeted = NO;
- if (tweet.retweetCount > 0) tweet.retweetCount--;
- layout.retweetCountTextLayout = [layout retweetCountTextLayoutForTweet:tweet];
- } else {
- tweet.retweeted = YES;
- tweet.retweetCount++;
- layout.retweetCountTextLayout = [layout retweetCountTextLayoutForTweet:tweet];
- }
- [cell.statusView.inlineActionsView updateRetweetWithAnimation];
- }
- - (void)cellDidClickFavorite:(T1StatusCell *)cell {
- T1StatusLayout *layout = cell.layout;
- T1Tweet *tweet = layout.displayedTweet;
- if (tweet.favorited) {
- tweet.favorited = NO;
- if (tweet.favoriteCount > 0) tweet.favoriteCount--;
- layout.favoriteCountTextLayout = [layout favoriteCountTextLayoutForTweet:tweet];
- } else {
- tweet.favorited = YES;
- tweet.favoriteCount++;
- layout.favoriteCountTextLayout = [layout favoriteCountTextLayoutForTweet:tweet];
- }
- [cell.statusView.inlineActionsView updateFavouriteWithAnimation];
- }
- - (void)cellDidClickFollow:(T1StatusCell *)cell {
- T1StatusLayout *layout = cell.layout;
- T1Tweet *tweet = layout.displayedTweet;
- tweet.user.following = !tweet.user.following;
- [cell.statusView.inlineActionsView updateFollowWithAnimation];
- }
- @end
|