ios 工作經(jīng)驗總結(jié)

1 播放一張張連續(xù)的圖片,例如刷新動畫

/ 加入現(xiàn)在有三張圖片分別為animate_1、animate_2立哑、animate_3
// 方法一
    imageView.animationImages = @[[UIImage imageNamed:@"animate_1"], [UIImage imageNamed:@"animate_2"], [UIImage imageNamed:@"animate_3"]];
imageView.animationDuration = 1.0;
// 方法二
    imageView.image = [UIImage animatedImageNamed:@"animate_" duration:1.0];
// 方法二解釋下夜惭,這個方法會加載animate_為前綴的,后邊0-1024铛绰,也就是animate_0诈茧、animate_1一直到animate_1024

2 tableView 使用總結(jié)

得到當前tableView顯示的 cell 數(shù)組
NSArray *cells = [self.tableView visibleCells];
// 判斷某一行的cell是否已經(jīng)顯示
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);
//tableView 自動滑動到某一行
 //第一種方法
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
//第二種方法
[self.tableVieW selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];

3 讓導(dǎo)航控制器pop回指定的控制器

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
for (UIViewController *aViewController in allViewControllers) {
    if ([aViewController isKindOfClass:[RequiredViewController class]]) {
        [self.navigationController popToViewController:aViewController animated:NO];
    }
}

4 獲取屏幕方向

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

if(orientation == 0) //Default orientation 
  //默認
else if(orientation == UIInterfaceOrientationPortrait)
  //豎屏
else if(orientation == UIInterfaceOrientationLandscapeLeft)
  // 左橫屏
else if(orientation == UIInterfaceOrientationLandscapeRight)
  //右橫屏

5 監(jiān)聽scrollView是否滾動到了頂部/底部

-(void)scrollViewDidScroll: (UIScrollView*)scrollView
{
    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset == 0)
    {
        // 滾動到了頂部
    }
    else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
    {
        // 滾動到了底部
    }
}

5 MD5加密

+ (NSString *)md5:(NSString *)str
{
    const char *concat_str = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(concat_str, (unsigned int)strlen(concat_str), result);
    NSMutableString *hash = [NSMutableString string];
    for (int i =0; i <16; i++){
        [hash appendFormat:@"%02X", result[i]];
    }
    return [hash uppercaseString];
}

6 單個頁面多個網(wǎng)絡(luò)請求的情況,需要監(jiān)聽所有網(wǎng)絡(luò)請求結(jié)束后刷新UI

dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t serialQueue = dispatch_queue_create("com.wzb.test.www", DISPATCH_QUEUE_SERIAL);
    dispatch_group_enter(group);
    dispatch_group_async(group, serialQueue, ^{
        // 網(wǎng)絡(luò)請求一
        [WebClick getDataSuccess:^(ResponseModel *model) {
            dispatch_group_leave(group);
        } failure:^(NSString *err) {
            dispatch_group_leave(group);
        }];
    });
    dispatch_group_enter(group);
    dispatch_group_async(group, serialQueue, ^{
        // 網(wǎng)絡(luò)請求二
        [WebClick getDataSuccess:getBigTypeRM onSuccess:^(ResponseModel *model) {
            dispatch_group_leave(group);
        }                                  failure:^(NSString *errorString) {
            dispatch_group_leave(group);
        }];
    });
    dispatch_group_enter(group);
    dispatch_group_async(group, serialQueue, ^{
        // 網(wǎng)絡(luò)請求三
        [WebClick getDataSuccess:^{
            dispatch_group_leave(group);
        } failure:^(NSString *errorString) {
            dispatch_group_leave(group);
        }];
    });

    // 所有網(wǎng)絡(luò)請求結(jié)束后會來到這個方法
    dispatch_group_notify(group, serialQueue, ^{
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            dispatch_async(dispatch_get_main_queue(), ^{
                // 刷新UI
            });
        });
    });
//利用線程組

7 頁面跳轉(zhuǎn)實現(xiàn)翻轉(zhuǎn)動畫

// modal方式(模態(tài))
    TestViewController *vc = [[TestViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];
    vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentViewController:vc animated:YES completion:nil];

// push方式
    TestViewController *vc = [[TestViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];
    [UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:0.80];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
    [self.navigationController pushViewController:vc animated:YES];
    [UIView commitAnimations];

8 獲取字符串中的數(shù)字

- (NSString *)getNumberFromStr:(NSString *)str
{
    NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    return [[str componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
 NSLog(@"%@", [self getNumberFromStr:@"12a0b05c1d2e3f4fda8fa8fad9fsad23"]);
 // 12005123488923
}

9 某個界面多個事件同時響應(yīng)引起的問題, (比如點擊過快, push 了兩個頁面)


// 一個一個設(shè)置太麻煩了捂掰,可以全局設(shè)置
[[UIView appearance] setExclusiveTouch:YES];

// 或者只設(shè)置button
[[UIButton appearance] setExclusiveTouch:YES];

10 禁止手機睡眠

[UIApplication sharedApplication].idleTimerDisabled = YES;

11獲取app緩存大小

- (CGFloat)getCachSize {

    NSUInteger imageCacheSize = [[SDImageCache sharedImageCache] getSize];
    //獲取自定義緩存大小
    //用枚舉器遍歷 一個文件夾的內(nèi)容
    //1.獲取 文件夾枚舉器
    NSString *myCachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:myCachePath];
    __block NSUInteger count = 0;
    //2.遍歷
    for (NSString *fileName in enumerator) {
        NSString *path = [myCachePath stringByAppendingPathComponent:fileName];
        NSDictionary *fileDict = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil];
        count += fileDict.fileSize;//自定義所有緩存大小
    }
    // 得到是字節(jié)  轉(zhuǎn)化為M
    CGFloat totalSize = ((CGFloat)imageCacheSize+count)/1024/1024;
    return totalSize;
}

12 清理app緩存

- (void)handleClearView {
    //刪除兩部分
    //1.刪除 sd 圖片緩存
    //先清除內(nèi)存中的圖片緩存
    [[SDImageCache sharedImageCache] clearMemory];
    //清除磁盤的緩存
    [[SDImageCache sharedImageCache] clearDisk];
    //2.刪除自己緩存
    NSString *myCachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"];
    [[NSFileManager defaultManager] removeItemAtPath:myCachePath error:nil];
}

13 AFNetworking監(jiān)聽網(wǎng)絡(luò)狀態(tài)

   AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
    [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                break;
            case AFNetworkReachabilityStatusNotReachable: {
                [SVProgressHUD showInfoWithStatus:@"當前設(shè)備無網(wǎng)絡(luò)"];
            }
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                [SVProgressHUD showInfoWithStatus:@"當前Wi-Fi網(wǎng)絡(luò)"];
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                [SVProgressHUD showInfoWithStatus:@"當前蜂窩移動網(wǎng)絡(luò)"];
                break;
            default:
                break;
        }
    }];
    

14 獲取一個視頻的第一幀圖片

 NSURL *url = [NSURL URLWithString:filepath];
    AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:url options:nil];
    AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
    generate1.appliesPreferredTrackTransform = YES;
    NSError *err = NULL;
    CMTime time = CMTimeMake(1, 2);
    CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
    UIImage *one = [[UIImage alloc] initWithCGImage:oneRef];

    return one;

15 獲取視頻的時長

+ (NSInteger)getVideoTimeByUrlString:(NSString *)urlString {
    NSURL *videoUrl = [NSURL URLWithString:urlString];
    AVURLAsset *avUrl = [AVURLAsset assetWithURL:videoUrl];
    CMTime time = [avUrl duration];
    int seconds = ceil(time.value/time.timescale);
    return seconds;
}

16 刪除NSUserDefaults所有記錄

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
 [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain]; 

17 為UIView某個角添加圓角

// 左上角和右下角添加圓角
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(20, 20)];
    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = view.bounds;
    maskLayer.path = maskPath.CGPath;
    view.layer.mask = maskLayer;

18 將一個view放置在其兄弟視圖的最上面

[parentView bringSubviewToFront:yourView]
// 將一個view放置在其兄弟視圖的最下面
[parentView sendSubviewToBack:yourView]

19 讓手機震動一下

  導(dǎo)入框架
#import <AudioToolbox/AudioToolbox.h>
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
或者
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

20 在非ViewController的地方彈出UIAlertController對話框

//  最好抽成一個分類
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
//...
id rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
if([rootViewController isKindOfClass:[UINavigationController class]])
{
    rootViewController = ((UINavigationController *)rootViewController).viewControllers.firstObject;
}
if([rootViewController isKindOfClass:[UITabBarController class]])
{
    rootViewController = ((UITabBarController *)rootViewController).selectedViewController;
}
[rootViewController presentViewController:alertController animated:YES completion:nil];

21 在狀態(tài)欄增加網(wǎng)絡(luò)請求的菊花敢会,類似safari加載網(wǎng)頁的時候狀態(tài)欄菊花

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

22 將一個image保存在相冊中

import <Photos/Photos.h>
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
        changeRequest.creationDate          = [NSDate date];
    } completionHandler:^(BOOL success, NSError *error) {
        if (success) {
            NSLog(@"successfully saved");
        }
        else {
            NSLog(@"error saving to photos: %@", error);
        }
    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末曾沈,一起剝皮案震驚了整個濱河市舔示,隨后出現(xiàn)的幾起案子灰追,更是在濱河造成了極大的恐慌芯勘,老刑警劉巖蹋订,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淌铐,死亡現(xiàn)場離奇詭異十拣,居然都是意外死亡祭饭,警方通過查閱死者的電腦和手機图毕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門惫皱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來像樊,“玉大人,你說我怎么就攤上這事旅敷∩鳎” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵媳谁,是天一觀的道長涂滴。 經(jīng)常有香客問我,道長晴音,這世上最難降的妖魔是什么柔纵? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮锤躁,結(jié)果婚禮上搁料,老公的妹妹穿的比我還像新娘。我一直安慰自己系羞,他們只是感情好郭计,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著椒振,像睡著了一般昭伸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澎迎,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天庐杨,我揣著相機與錄音,去河邊找鬼夹供。 笑死灵份,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的罩引。 我是一名探鬼主播各吨,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揭蜒?” 一聲冷哼從身側(cè)響起横浑,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屉更,沒想到半個月后徙融,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡瑰谜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年欺冀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨脑。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡隐轩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渤早,到底是詐尸還是另有隱情职车,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布鹊杖,位于F島的核電站悴灵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骂蓖。R本人自食惡果不足惜积瞒,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望登下。 院中可真熱鬧茫孔,春花似錦、人聲如沸庐船。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筐钟。三九已至,卻和暖如春赋朦,著一層夾襖步出監(jiān)牢的瞬間篓冲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工宠哄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留壹将,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓毛嫉,卻偏偏與公主長得像诽俯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子承粤,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,838評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫暴区、插件闯团、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 單張圖片緩存思路先把圖片緩存到本地,再獲取圖片大小 (GCD調(diào)度組監(jiān)聽下載完成) 單張圖片緩存進入加載微博列表視圖...
    DavidFeng_swift閱讀 172評論 0 1
  • 礽哥兒坐著會哦哦對話了房交,雖然嗓音嘶啞,像卡著痰伐割,一點不像小孩子候味。 一直咬我。 能拿的動安撫小海馬了隔心,激動地啊啊叫白群。...
    礽哥兒閱讀 145評論 0 0