- (void)viewWillLayoutSubviews {
//為什么要在這里調(diào)用一次alert 是因?yàn)?presentViewController 方法必須在頁(yè)面加載完成之后才會(huì)加載 否則會(huì)報(bào)錯(cuò)不能彈出 因?yàn)閤ib的viewDidLoad的時(shí)候并未加載完成
//Warning: Attempt to present? on? whose view is not in the window hierarchy!
//記錄一下知識(shí)點(diǎn) xib的生命周期與storyboard、純代碼 是不一樣的 在vc生命周期的方法中打印vc的view尺寸的變化,可以看到viewDidLoad到viewWillAppear:中view的size都是xib的大小,到viewDidAppear的方法中才將view的大小按照模擬器的屏幕尺寸改回來(lái)? 但是將布局代碼放在viewDidAppear中也不好? 所以可以在這個(gè)方法中進(jìn)行布局 這個(gè)方法類似UIView的layoutSubviews? 控制器加載完view后會(huì)再調(diào)用
//viewDidLoad、viewWillAppear咏尝、viewWillLayoutSubviews、viewDidLayoutSubviews、viewDidAppear 分別打印出self.view.frame 查看 可以明確的看到 viewDidLoad鼻听、viewWillAppear中加載的 frame是xib中的frame 到viewWillLayoutSubviews開(kāi)始 加載的是 屏幕尺寸的frame
//所以針對(duì)當(dāng)前的這個(gè)需求 可以理解為 在viewDidLoad的時(shí)候 雖然viewDidLoad方法已經(jīng)執(zhí)行了 但是xib文件還沒(méi)有加載完成 到viewWillLayoutSubviews方法 xib加載完成 這時(shí)候presentViewController就可以執(zhí)行了? ? 純代碼布局的vc中不會(huì)出現(xiàn)這個(gè)問(wèn)題
Reachability *curReach = [Reachability reachabilityWithHostName:@"www.apple.com"];
if ([curReach currentReachabilityStatus] == NotReachable) {
[self showNoNetworkAlert];
}
}
- (void) showNoNetworkAlert {
UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"啦啦啦啦啦啦" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"重試" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self validateAndDownloadClientPack];
}];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];
}
源碼在 DBBMoBo中 DBBLaunchViewController.m
連上手機(jī),選擇windows-》devices联四,選中設(shè)備撑碴,在右邊選擇你的APP,下方的設(shè)置按鈕有download container
然后下載文件朝墩,顯示包內(nèi)容醉拓,即是沙盒內(nèi)的文件。
在真機(jī)上, 不能move bundle中的文件到document目錄下 亿卤,但是 copy 可以愤兵, 可以copy bundle中的文件到 document。
WKWebview不支持 NSURLProtocol? 排吴,添加了一個(gè)類 : NSURLProtocol+WebKitSupport? 使用了私有API? ? github上有
WKWebview 禁止縮放
self.wkWebView.scrollView.delegate = self;
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
? ? return nil;
}
NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
? ? ? ? ? ? ? ? ? ? ? NSLog(@"%@",errResponse);
? ? (void)viewDidLoad {
? ? [super viewDidLoad];
? ? // Do any additional setup after loading the view from its nib.
? ? //重點(diǎn) 設(shè)置frame時(shí)需要這樣設(shè)置秆乳,如果直接設(shè)置self.view.frame 時(shí)是無(wú)法自適應(yīng)屏幕的
? ? WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0,
? ? 0,
? ? ISScreen_Width,
? ? ISScreen_Height)];
? ? NSURL * webURL = [NSURL URLWithString:self.needOpenURL];
? ? NSURLRequest * webRequest = [NSURLRequest requestWithURL:webURL];
? ? [webView loadRequest:webRequest];
? ? [self.view addSubview:webView];
//滑動(dòng)返回看這里
webView.allowsBackForwardNavigationGestures = NO;
//重點(diǎn)(當(dāng)然需要遵守協(xié)議,不然會(huì)有警告)(當(dāng)然遵守了這個(gè)你就可以側(cè)滑返回上個(gè)頁(yè)面了)
webView.navigationDelegate = self;
}
使用個(gè)人開(kāi)發(fā)者賬號(hào) 真機(jī)調(diào)試的時(shí)候 報(bào)錯(cuò) 說(shuō)
Set the provisioning profile value to "Automatic" in the build settings editor,
意思說(shuō) provisioning profile的設(shè)置不正確 應(yīng)該設(shè)置成Automatic
可是設(shè)置成了 Automatic 還是不行 報(bào)一樣的 錯(cuò)
問(wèn)題在于 在Build Setting中的User-Defined中 有一個(gè)
PROVISIONING_PROFILE? 注意是 大寫的 把這個(gè)中的設(shè)置 全部清空就可以了
抽屜的效果 側(cè)邊欄加拖動(dòng)手勢(shì) 最左側(cè) 在屏幕外加一個(gè)tableview
拖動(dòng)的時(shí)候 加上動(dòng)畫效果 讓左側(cè)的tableview改變frame 讓原本頁(yè)面的tableview也改變frame 從右邊滑出去 然后可以在拖動(dòng)的時(shí)候 給原本的tableview加一個(gè)漸變色的灰色圖層 到滑動(dòng)到停止后 灰色圖層上添加一個(gè)單擊手勢(shì) 點(diǎn)擊 就再用動(dòng)畫 彈回去 如果添加外部的按鈕控制 也是一樣 在動(dòng)畫中 添加兩個(gè)改變frame 和 添加漸變色圖層的方法 動(dòng)畫完成 添加單擊手勢(shì)? 簡(jiǎn)單
General里Display Name改了之后 需要卸載安裝才生效
InfoPlist.strings里的CFBundleDisplayName改了以后 即時(shí)生效
在集合類對(duì)象中钻哩,對(duì) immutable 對(duì)象進(jìn)行 copy屹堰,是指針復(fù)制, mutableCopy 是內(nèi)容復(fù)制街氢;對(duì) mutable 對(duì)象進(jìn)行 copy 和 mutableCopy 都是內(nèi)容復(fù)制扯键。但是:集合對(duì)象的內(nèi)容復(fù)制僅限于對(duì)象本身,對(duì)象元素仍然是指針復(fù)制珊肃。用代碼簡(jiǎn)單表示如下:
[immutableObject copy] // 淺復(fù)制
[immutableObject mutableCopy] //單層深復(fù)制
[mutableObject copy] //單層深復(fù)制
[mutableObject mutableCopy] //單層深復(fù)制
就是說(shuō)荣刑,對(duì)可變類型來(lái)說(shuō),無(wú)論copy還是mutableCopy近范,都是進(jìn)行深復(fù)制也就是內(nèi)容復(fù)制嘶摊,那么例子里面
self.array = [mutableArray copy];? 是深復(fù)制,復(fù)制了內(nèi)容评矩,開(kāi)辟新內(nèi)存
self.array = mutableArray;? ? ? ? ? ? 是淺復(fù)制叶堆,只復(fù)制指針,不占用新內(nèi)存