iOS工作筆記(十五)

來源:互聯網
上載者:User

標籤:load   height   mat   ima   elf   move   gpo   下拉載入   omd   

1.使用MJRefresh上拉載入的小細節

MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingBlock:^{    [_searchResultView.mj_footer endRefreshing];    //載入新內容    [self loadMoreItemList];}];

這樣寫的效果是,當下拉載入時,新內容是不直接展現的,還得繼續往上拉,才能看到新內容

當換種寫法,將endRefreshing寫在loadMoreItemList時,效果就不一樣了

MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingBlock:^{    //載入新內容    [self loadMoreItemList];}];-(void)loadMoreItemList{    //其餘代碼……    //停止重新整理    if (_searchResultView.mj_footer.state == MJRefreshStateRefreshing) {        if (arrTemp.count > 0) {            [_searchResultView.mj_footer endRefreshing];        } else {            [_searchResultView.mj_footer endRefreshingWithNoMoreData];        }    }}

這樣效果就好多了,出現新內容直接展示,而不需要在往上拖才知道有新內容,體驗比較好。

雖然是細節問題,但體驗會不一樣。

 

2.畫貝茲路徑時,以下的兩種畫法區別在於

UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:view.bounds];

bezierPathWithRect     根據一個矩形畫曲線
bezierPathWithOvalInRect      根據一個矩形的內切圓畫曲線

3.若有需求,在app中,一個介面只在使用者每天初次開機時展示,那麼思路可以這樣,先擷取目前時間,然後與NSUserDefaults中儲存的時間相比較,若為同一天,則不展示,反之亦然。

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];NSString *timeStorage = [user objectForKey:@"signTime"];NSDate *senddate = [NSDate date];NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];[dateformatter setDateFormat:@"YYYY-MM-dd"];NSString *timeNow = [dateformatter stringFromDate:senddate];if (![timeNow isEqualToString:timeStorage]) {     //說明是當天初次開機}

上述方法有點問題,若牽涉到多帳號問題,如換個帳號登入,那麼第二個帳號就算當天首次登入,也不會展示。

解決方案就是往NSUserDefaults儲存時間時,key把例子中的signTime變為使用者id即可。

 

4.畫虛線,可以用drawRect,也可以用CAShapeLayer,相對來說,後者的使用範圍更廣一些,既可以寫在view內,也可以寫到controller中。

以CAShapeLayer為例,需要用到setLineDashPattern設定虛線線寬和間距

CAShapeLayer *shapeLayer = [CAShapeLayer layer];[shapeLayer setBounds:lineView.bounds];[shapeLayer setPosition:CGPointMake(lineView.frame.size.width / 2.0, lineView.frame.size.height)];[shapeLayer setFillColor:[UIColor clearColor].CGColor];//設定虛線顏色[shapeLayer setStrokeColor:[UIColor lightGrayColor].CGColor];//設定虛線寬度[shapeLayer setLineWidth:lineView.frame.size.height];//設定虛線的線寬及間距[shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:5], [NSNumber numberWithInt:5], nil]];CGMutablePathRef path = CGPathCreateMutable();CGPathMoveToPoint(path, NULL, 0, 0);CGPathAddLineToPoint(path, NULL, lineView.frame.size.width, 0);[shapeLayer setPath:path];CGPathRelease(path);[lineView.layer addSublayer:shapeLayer];

效果如下:

 

5.底部導覽列tabbar的點擊代理方法中,點擊的序號可以擷取上一個和現在點擊的

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController*)viewController {    //現在點擊的    NSUInteger selectedNum = [tabBarController.viewControllers indexOfObject:viewController];    //上一個    NSUInteger selectedIndex = tabBarController.selectedIndex;}

 

6.擷取螢幕可視地區上有哪些cell顯示,可以用

①UITableview的方法,這個最直接,返回一個UITableviewcell的數組。

- (NSArray*)visibleCells;

②UITableview的又一個方法,返回一個NSIndexPath的數組,可以直接用indexpath.row去調table裡的資料了。比較方便用於自定製的cell

- (NSArray*)indexPathsForVisibleRows;

③擷取index內的frame

- (CGRect)rectForRowAtIndexPath:(NSIndexPath*)indexPath;

 

7.判斷controller是否在當前螢幕展示,即出現在可視地區,在controller中可以用

self.isViewLoaded && self.view.window來判斷。
也可以添加到controller的分類中

+(BOOL)isControllerVisible:(UIViewController *)controller{    return[controller.isViewLoaded && controller.view.window];}

因為當controller的view展示時,view.window一定不是空值。

iOS工作筆記(十五)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.