亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現多個彈框按順序依次彈出效果

2019-10-21 18:40:09
字體:
來源:轉載
供稿:網友

有時候會有這樣的需求:App 運行完,加載 RootVC ,此時需要做一些操作,比如檢查更新,之類的。此時可能會需要有2個甚至多個彈框依次彈出。

本篇將以系統的 UIAlertController 作為示例,當然,如果是自定義的,也要看一下這篇文章,如何來處理多個彈窗。

首先,如果就按照如下的默認寫法:

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"彈框1" message:@"第一個彈框" preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]]; [self presentViewController:alert animated:YES completion:nil]; UIAlertController *alert2 = [UIAlertController alertControllerWithTitle:@"彈框2" message:@"第二個彈框" preferredStyle:UIAlertControllerStyleAlert]; [alert2 addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]]; [self presentViewController:alert2 animated:YES completion:nil];}

會有什么問題呢?注意控制臺,肯定會輸出

Warning: Attempt to present <UIAlertController: 0x7ff4c3078c00>  on <SCTestViewController: 0x7ff4c2718c20> which is already presenting <UIAlertController: 0x7ff4c283ae00>

所以說,第二個彈框應該是看不到的。

另一種情況,如果是自定義的 Alert ,你把它 add 為 window 的子視圖,這么做第二個彈框會蓋在第一個上面。如果你用了毛玻璃背景,效果會更加明顯。肯定不合適了。

所以,正確的解決辦法就是類似加鎖的過程,當點擊了第一個彈框的某個按鈕之后,再彈出第二個彈框,以此類瑞。

這里,我想到用信號量去解決,但是信號量會阻塞線程,不可以直接在主線程使用。所以我們需要在子線程控制信號量,在主線程創建和顯示 Alert,直接上代碼。

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //創建一個隊列,串行并行都可以,主要為了操作信號量 dispatch_queue_t queue = dispatch_queue_create("com.se7en.alert", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{  //創建一個初始為0的信號量  dispatch_semaphore_t sema = dispatch_semaphore_create(0);  //第一個彈框,UI的創建和顯示,要在主線程  dispatch_async(dispatch_get_main_queue(), ^{   UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"彈框1" message:@"第一個彈框" preferredStyle:UIAlertControllerStyleAlert];   [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {    //點擊Alert上的按鈕,我們發送一次信號。    dispatch_semaphore_signal(sema);   }]];   [self presentViewController:alert animated:YES completion:nil];  });  //等待信號觸發,注意,這里是在我們創建的隊列中等待  dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  //上面的等待到信號觸發之后,再創建第二個Alert  dispatch_async(dispatch_get_main_queue(), ^{   UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"彈框2" message:@"第二個彈框" preferredStyle:UIAlertControllerStyleAlert];   [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {    dispatch_semaphore_signal(sema);   }]];   [self presentViewController:alert animated:YES completion:nil];  });  //同理,創建第三個Alert  dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  dispatch_async(dispatch_get_main_queue(), ^{   UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"彈框3" message:@"第三個彈框" preferredStyle:UIAlertControllerStyleAlert];   [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {    dispatch_semaphore_signal(sema);   }]];   [self presentViewController:alert animated:YES completion:nil];  }); });}

如此一來,就實現了我們的需求。

需要注意的是,這里為什么不用全局并發隊列,主要是考慮到信號量會阻塞線程,優先級特別高,如果此時隊列中還有任務,那么就會等待信號觸發。當然也有人故意這么做。對于 “彈框彈出的時間,不要做其他任何事情” 這種需求是很合適的。當然我們千萬不能去阻塞主線程!

我們在異步線程等待信號,在主線程發信號,如此就可以實現兩個線程同步。其實信號量就是一種鎖。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
深夜福利国产精品| 91在线看www| 欧美壮男野外gaytube| 精品视频在线播放色网色视频| 亚洲美女自拍视频| 成人日韩av在线| 日韩av在线电影网| 欧美日韩性生活视频| 在线看片第一页欧美| 欧美午夜精品久久久久久浪潮| 一个色综合导航| 日韩精品视频观看| 亚洲自拍另类欧美丝袜| 久久久久久69| 亚洲精品综合久久中文字幕| 亚洲女同性videos| 国产精品偷伦一区二区| 亚洲自拍高清视频网站| 亚洲tv在线观看| 国产精品久久久| 国产狼人综合免费视频| 成人黄色免费看| 精品久久久久久| 中文字幕自拍vr一区二区三区| 欧美精品生活片| 欧美大肥婆大肥bbbbb| 亚洲人线精品午夜| 亚洲石原莉奈一区二区在线观看| 日韩在线观看免费高清完整版| 青青a在线精品免费观看| 久久久久久久色| 一本色道久久88综合亚洲精品ⅰ| 日韩av中文字幕在线| 成人久久久久久| 国产精品99久久久久久久久| 中文字幕精品一区久久久久| 中文字幕自拍vr一区二区三区| 亚洲乱码av中文一区二区| 狠狠躁18三区二区一区| www.99久久热国产日韩欧美.com| 中国日韩欧美久久久久久久久| 国产精品揄拍500视频| 91在线|亚洲| 久久91亚洲人成电影网站| 狠狠爱在线视频一区| 亚洲一区二区久久久久久| 亚洲欧美日韩一区二区在线| 激情成人在线视频| 国产视频在线一区二区| 欧美性猛交xxxx黑人猛交| 亚洲精品v欧美精品v日韩精品| 国产精品video| 日韩av免费看| 狠狠色香婷婷久久亚洲精品| 久久久久国产精品免费网站| 青青青国产精品一区二区| 97成人精品视频在线观看| 欧美老女人性生活| 成人妇女淫片aaaa视频| 亚洲精品国产综合区久久久久久久| 日本电影亚洲天堂| 欧美激情精品久久久久久大尺度| 日韩av电影手机在线| 精品国产一区av| 精品国产欧美成人夜夜嗨| 日韩av影片在线观看| 亚洲综合中文字幕68页| 亚洲第一av网| 在线观看欧美www| 97香蕉超级碰碰久久免费软件| 亚洲欧美日韩天堂一区二区| 91午夜理伦私人影院| 91爱爱小视频k| 国产精品久久久久久久久粉嫩av| 国产一区二区日韩精品欧美精品| 久久久久久国产精品美女| 国产一区二区三区日韩欧美| 97视频人免费观看| 成人激情视频在线| 亚洲专区中文字幕| 久久99久国产精品黄毛片入口| 国产精品7m视频| 日韩在线视频一区| 日韩电影在线观看永久视频免费网站| 欧美丝袜一区二区| 久久精品免费播放| 少妇激情综合网| 亚洲第五色综合网| 日韩极品精品视频免费观看| 亚洲精品99久久久久中文字幕| 国产精品日韩久久久久| 国产精品久久婷婷六月丁香| 亚洲二区中文字幕| 色综合久久精品亚洲国产| 欧美最顶级丰满的aⅴ艳星| 97视频在线免费观看| 日韩精品欧美国产精品忘忧草| 91精品国产99久久久久久| 亚洲视频电影图片偷拍一区| 在线电影欧美日韩一区二区私密| 亚洲va国产va天堂va久久| 91香蕉电影院| 性欧美激情精品| 情事1991在线| 精品福利在线观看| 丰满岳妇乱一区二区三区| 97视频国产在线| 精品国产精品三级精品av网址| 亚洲图片在线综合| 中文字幕日韩在线播放| 欧美成年人网站| 亚洲男人av电影| 日韩av一区在线| 91精品国产高清久久久久久| 91免费精品国偷自产在线| 久久久久女教师免费一区| 国产成人一区二区| 国产精品18久久久久久麻辣| 国产欧美日韩中文| 亚洲xxxx做受欧美| 欧美性猛交xxxx免费看漫画| 欧美性极品xxxx娇小| 国产日韩欧美黄色| 国产精品露脸av在线| 91精品国产精品| 欧美大胆a视频| 欧美亚洲日本黄色| 久久国产精品影片| 精品性高朝久久久久久久| 亚洲天堂av在线免费| 亚洲白拍色综合图区| 中文字幕成人在线| 欧美日韩在线视频观看| 欧美极度另类性三渗透| 91精品视频在线播放| 亚州欧美日韩中文视频| 尤物yw午夜国产精品视频明星| 成人免费观看网址| 久久精视频免费在线久久完整在线看| 久久久久久国产精品三级玉女聊斋| 国产成人高潮免费观看精品| 国产精品久久久久久影视| 欧美性极品xxxx做受| 亚洲乱码国产乱码精品精天堂| 中文字幕亚洲欧美日韩高清| 成人黄色生活片| 欧美激情va永久在线播放| 久99九色视频在线观看| 亚洲欧美综合v| 国自在线精品视频| 日韩在线中文字| 久久亚洲精品网站| 亚洲一区二区久久久久久久| 欧美丰满老妇厨房牲生活| 人体精品一二三区| 国语自产偷拍精品视频偷| 欧美日韩亚洲高清| 成人福利网站在线观看| 亚洲欧美国产精品久久久久久久| 国产成人精品在线视频| 欧美壮男野外gaytube| 日韩电视剧免费观看网站| 91在线高清视频| 中文字幕日韩专区|