你好,歡迎來到IOS教程網

1014

編輯:IOS技巧綜合
[摘要]本文是對1014-26-首頁07-最新微博數量-------顯示最新微博數量動畫---平鋪圖片---數組插入數組的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

1. 集成 自帶的 下拉屬性控件 ---------HWHomeViewController

- (void)viewDidLoad
{
[super viewDidLoad];

// 集成刷新控件
[self setupRefresh];
}

/** 集成 下拉刷新 控件 */
- (void)setupRefresh
{
// 1.添加刷新控件
UIRefreshControl *control = [[UIRefreshControl alloc] init];
// 只有用戶通過手動下拉刷新,才會觸發UIControlEventValueChanged事件
[control addTarget:self action:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:control];

// 2.馬上進入刷新狀態(僅僅是顯示刷新狀態,並不會觸發UIControlEventValueChanged事件)
[control beginRefreshing];

// 3.馬上加載數據
[self refreshStateChange:control];
}

----------------------------------------------------------------------------------------------------------

/**
* UIRefreshControl進入刷新狀態:加載最新的數據
*/
- (void)refreshStateChange:(UIRefreshControl *)control
{
// 1.請求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

// 2.拼接請求參數
HWAccount *account = [HWAccountTool account];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"access_token"] = account.access_token;

// 取出最前面的微博(最新的微博,ID最大的微博)
HWStatus *firstStatus = [self.statuses firstObject];
if (firstStatus) {
// 若指定此參數,則返回ID比since_id大的微博(即比since_id時間晚的微博),默認為0
params[@"since_id"] = firstStatus.idstr;
}

// 3.發送請求
[mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
// 將 "微博字典"數組 轉為 "微博模型"數組
NSArray *newStatuses = [HWStatus objectArrayWithKeyValuesArray:responseObject[@"statuses"]];

// 將最新的微博數據,添加到總數組的最前面
NSRange range = NSMakeRange(0, newStatuses.count);
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
[self.statuses insertObjects:newStatuses atIndexes:set];

// 刷新表格
[self.tableView reloadData];

// 結束刷新刷新
[control endRefreshing];

// 顯示最新微博的數量
[self showNewStatusCount:newStatuses.count];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
HWLog(@"請求失敗-%@", error);

// 結束刷新刷新
[control endRefreshing];
}];
}


/**
* 顯示最新微博的數量
*
* @param count 最新微博的數量
*/
- (void)showNewStatusCount:(int)count
{
// 1.創建label
UILabel *label = [[UILabel alloc] init];
// colorWithPatternImage: 這個方法用在平鋪的場合。
label.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"timeline_new_status_background"]];
label.width = [UIScreen mainScreen].bounds.size.width;
label.height = 35;

// 2.設置其他屬性
if (count == 0) {
label.text = @"沒有新的微博數據,稍後再試";
} else {
label.text = [NSString stringWithFormat:@"共有%d條新的微博數據", count];
}
label.textColor = [UIColor whiteColor];
label.textAlignment = NSTextAlignmentCenter;
label.font = [UIFont systemFontOfSize:16];

// 3.添加
label.y = 64 - label.height;
// 將label添加到導航控制器的view中,並且是蓋在導航欄下邊
[self.navigationController.view insertSubview:label belowSubview:self.navigationController.navigationBar];

// 4.動畫
// 先利用1s的時間,讓label往下移動一段距離
CGFloat duration = 1.0; // 動畫的時間
[UIView animateWithDuration:duration animations:^{


// label.y += label.height;
label.transform = CGAffineTransformMakeTranslation(0, label.height);


} completion:^(BOOL finished) {


// 延遲1s後,再利用1s的時間,讓label往上移動一段距離(回到一開始的狀態)
CGFloat delay = 1.0; // 延遲1s
// UIViewAnimationOptionCurveLinear:勻速
[UIView animateWithDuration:duration delay:delay options:UIViewAnimationOptionCurveLinear animations:^{
// label.y -= label.height;
label.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
[label removeFromSuperview];
}];
}];

// 如果某個動畫執行完畢後,又要回到動畫執行前的狀態,建議使用transform來做動畫
}

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved