iOS開發—技巧總結(一)

weixin_34402408發表於2016-06-15

今天心血來潮看了看幾天前收藏的別人家的程式碼,學到一些小技巧,迫不及待想總結一下,以備不時之需。
分享一個原作者的部落格地址: http://www.jianshu.com/p/6decbc69c197正如作者所說的這個Demo裡面有很多好東西值得學習哦!

First Tip

CGAffineTransformIdentity

先粘兩段程式碼:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    [UIView animateWithDuration:1 animations:^{
        self.tabBarController.tabBar.transform = CGAffineTransformMakeTranslation(0, 49);
    }];
}

上面是 ScrollView 的代理方法,當將要開始滑動 tableview 的時候平移 tabBar,我建議大家可以普及一下關於 CGAffineTransform的知識,還是蠻有用的。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    [UIView animateWithDuration:1.0 delay:0.8 options:UIViewAnimationOptionOverrideInheritedCurve animations:^{
        self.tabBarController.tabBar.transform = CGAffineTransformIdentity;
    } completion:nil];
}

上面一段程式碼時已經結束滑動 tableview 的時候所做的動畫,重點就是這行程式碼 self.tabBarController.tabBar.transform = CGAffineTransformIdentity; 將 tabBar 恢復到原始咩有 CGAffineTransform 執行過的狀態,也就是讓View回到原始狀態。

關於 View.transform = CGAffineTransformIdentity .
如果我們在為一個view設定了多個CGAffineTransform, 那麼每一個CGAffineTransform都以在上一個CGAffineTransform執行完後的位置的center作為參照點執行的.
如果我們在每一個CGAffineTransform執行前加一句:
View.transform = CGAffineTransformIdentity
那麼會先把view恢復到原始的沒有CGAffineTransform執行過得狀態, 然後再執行CGAffineTransform.
這樣就相當於, 每一個CGAffineTransform執行前, view都會先歸位. 然後再執行. 所以沒有CGAffineTransform都是以view的原始位置為參考, 互不影響.
我們也可以在進行了一系列CGAffineTransform後 通過View.transform = CGAffineTransformIdentity 來讓view回到原始狀態
原文地址:http://www.dahuangphone.com/dv_rss.asp?s=xhtml&boardid=8&id=274&page=2

Second Tip

拖動 scollview 過程中實現漸變效果

來獻上程式碼:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    UIColor *color = [UIColor brownColor];
    CGFloat offsetY = scrollView.contentOffset.y;
    if (offsetY > 0) {
        CGFloat alpha = 1 - ((64 - offsetY) / 64);
        if (alpha>1) {
            alpha = 1;
        }
        _topBgView.backgroundColor = [color colorWithAlphaComponent:alpha];
    } else {
        _topBgView.backgroundColor = [color colorWithAlphaComponent:0];
    }
}

在拖動 scrollView 的過程中,均勻改變 _topBgView 的背景色,很簡單的實現思路,但有兩點值得一提:

  • CGFloat alpha = 1 - ((64 - offsetY) / 64); 該行程式碼用來實現透明度的均勻變化
  • _topBgView.backgroundColor = [color colorWithAlphaComponent:alpha]; 中的 colorWithAlphaComponent 方法返回的是新增透明度後的顏色

Third Tip

當一個 tableview 的headerView 或footerView 有點選載入更多更能的時候,可以在 tableview 的代理方法實現 - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
方法
下面方法是點選tableview 每個section 的 headerview 時載入更多的資訊

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    MGHeadView *sectionHeadView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headViewIdentifier];
    
    MGSectionModel *sectionModel = self.sectionDataSources[section];
    sectionHeadView.model = sectionModel;
    
    sectionHeadView.expandCallback = ^(BOOL isExpanded){
        [tableView reloadSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationFade];
    };
    
    return sectionHeadView;
}

相關文章