記錄器
創(chuàng)新互聯(lián)公司是專業(yè)的夏縣網(wǎng)站建設公司,夏縣接單;提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行夏縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
基于不同的場景提供關于記錄的封裝、適配。一般分為頁面式,流式,自定義式。
記錄管理者
管理統(tǒng)計記錄數(shù)據(jù),包含記錄緩存,磁盤存儲,上傳器。
如何降低數(shù)據(jù)的丟失率?
兩種解決方案:
記錄上傳的時機
上傳時機的選擇
從三個方面分析架構設計:整體架構、數(shù)據(jù)流、反向更新。
View 的功能包含:控件的初始化、設置數(shù)據(jù)、交互事件代理等。
ViewController 的功能:視圖創(chuàng)建與組合、協(xié)調(diào)邏輯、事件回調(diào)處理等,事件回調(diào)處理指的是視圖層的事件。
業(yè)務邏輯處理(預排版)、數(shù)據(jù)增刪改查封裝者、線程安全處理。
網(wǎng)絡請求、數(shù)據(jù)解析、增刪改查、本地處理邏輯(適配)
數(shù)據(jù)流包含:網(wǎng)絡數(shù)據(jù)、業(yè)務數(shù)據(jù)、UI數(shù)據(jù)三部分。
網(wǎng)絡數(shù)據(jù)經(jīng)過 Engine 層處理加工產(chǎn)生業(yè)務數(shù)據(jù),業(yè)務數(shù)據(jù)經(jīng)過 ViewModel 層處理產(chǎn)生UI數(shù)據(jù),UI數(shù)據(jù)會轉交給視圖控制器控制視圖的顯示。
用戶交互網(wǎng)絡刷新等都會導致視圖層變化,通過代理方式通知視圖控制器??刂破鲗iewModel的強引用找到對應ViewModel,然后通過UI數(shù)據(jù)對業(yè)務數(shù)據(jù)的弱引用找到對應的業(yè)務數(shù)據(jù)同時打上臟標記。最后ViewModel進行數(shù)據(jù)流的重新驅(qū)動,將臟數(shù)據(jù)重新處理生成新的UI數(shù)據(jù)更新視圖。
本節(jié)梳理時長統(tǒng)計實現(xiàn)原理和復雜頁面的架構實現(xiàn)思路。
html的引用標簽是a標簽
主要格式為a href="鏈接地址,默認為#"名稱/a
在所有瀏覽器中,鏈接的默認外觀是:
未被訪問的鏈接帶有下劃線而且是藍色的
已被訪問的鏈接帶有下劃線而且是紫色的
活動鏈接帶有下劃線而且是紅色的
有很多人更新xcode會出現(xiàn)app有黑邊的情況,這種情況常見,搜索一下也會有很多種解決方法,也好解決,但是如果您是遇到另一種黑邊 像加載H5頁面或是webview上加載頁面,出現(xiàn)px像素缺斤少兩的情況,但是你的視圖也都是適配屏,改view坐標沒有反應的情況下該怎么解決。
下面直接上圖:
底下有一條黑邊,你的有可能是上面,也可能是下面少了這樣的一截,后面我經(jīng)常排查,就發(fā)現(xiàn)了如下的問題。
選 擇webview的頁面坐標是對的,但是當我選擇webview的子視頻?UIWebBrowserView的時候發(fā)現(xiàn)少了20px,原本沒更新xocde的時候,是沒這項問題。也不會出現(xiàn)黑邊。所以我猜想是UIWebBrowserView這項的位置坐標問題。但是UIWebBrowserView又找不到,因為他是webview的子視圖,是一個瀏覽器顯示視圖,那么我們就改一下webview的位置試試,發(fā)現(xiàn)往上偏移,那么它可能是會上躥下跳,設置你的webview.opaque=NO; 設置它的顏色是white,或者是clear,就ok了。
為了更好理解使用用tabbar和切換視圖,我們創(chuàng)建一個Empty Application。
1、 打開Xcode ,新建項目
2、 創(chuàng)建View Controller
在項目上按花鍵+N創(chuàng)建新文件,創(chuàng)建 Objective-C class 文件,按Next按鈕,subClass 選UIViewController 。勾選上xib選項
以同樣方式創(chuàng)建另外三個ViewController ,RedViewController ,GreyViewController,YellowViewController。四個View準備好了。那么Tabbar呢?
3、 創(chuàng)建TabBarController.xib文件,選擇創(chuàng)建Empty文件
這時候你發(fā)現(xiàn)創(chuàng)建的xib文件是空白的,不用慌,去右下角控件欄中把TabBar Controller拖過來就Ok了。
4、 關聯(lián)TabBarController.xib ,tabbarAppDelegate這兩個文件
在上圖中選擇File’s Owner,打開Identity Inspector,在Class一欄選擇tabbarAppDelegate
這樣,我們就可以創(chuàng)建TabBarController.xib 文件指向tabbarAppDelegate 文件的Outlet映射了。
5、 在Xcode中的工具欄的View菜單找到 打開Assistant Editor,使tabbarAppDelegate.h和TabBarController.xib 同時打開。
在xib文件上按住control鍵,往tabbarAppDelegate.h,創(chuàng)建Outlet.
彈出窗口輸入 rootController,點connect。
6、 添加代碼
打開tabbarAppDelegate.m,在didFinishLaunchingWithOptions方法中添加代碼:
1.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
3. // Override point for customization after application launch.
4. [[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil];
5. [self.window addSubview:self.rootController.view];
6. self.window.backgroundColor = [UIColor whiteColor];
7. [self.window makeKeyAndVisible];
8. return YES;
7、 往TabBarController.xib上添加Tab Bar Item,
把控件欄上的Tab Bar Item控件往TabBarController.xib上拖拽即可,一個放4個。
8 、關聯(lián)Tab Bar Item和***ViewController。
選擇其中一個Tab Bar Item,在右上角打開Identity Inspector,在Class中選擇BlueViewController:
然后,打開Attribute,在NIB Name選擇BlueViewController:
其他3個tab item重復類似的操作,選中對應的ViewController,這樣在切換Tab標簽時,就可以切換到對應的頁面。
9、 設置tab item的屬性
選中其中一個tab item ,會在右上角的屬性欄里看到如下信息
Badge是紅色圈圈里面有數(shù)字 ,表示有多少條信息的屬性
Identifier 是tab item的樣式,選custom是自定義,下面的是系統(tǒng)的樣式。我選了其中四種。
bar ITem 的title image在custom的樣式下能設置。
10 、剩下的3個Tab Item也做類似的設置即可。
現(xiàn)在基本完工,運行看看結果如何。好吧,其實和第一第二個圖是一樣的`,這里就不放了。
11 、在viewDidLoad方法加Log觀察切換View
可以加寫日志看看對應的View是什么時候運行的。第一個運行的View是BlueViewController,點擊其他的tab項時,加載其他的view,加載一次之后下次點擊不再調(diào)用viewDidLoad。
1.- (void)viewDidLoad
2. [super viewDidLoad];
3. NSLog(@"BlueViewController");
4. // Do any additional setup after loading the view from its nib.
既然要承載 web 頁面,一個原生的 WebView 必不可少。在 iOS 中,目前已經(jīng)有兩款高性能、功能齊全的 web 瀏覽器,UIWebView (=2.0)和 WKWebView(=7.0)。
當然,兩種 web 瀏覽器選其一即可。網(wǎng)上有很多文章,包括我之前已經(jīng)發(fā)表的博文中,都介紹過這兩種瀏覽器,讀者可以根據(jù)自己的需要選擇。
就目前的情況看,UIWebView 發(fā)展了很多年,目前市面上大部分的 web 頁面也都支持這樣的瀏覽器,因此很多公司在選擇的時候都使用這個,但是,我們知道,WKWebView 有太多改善前者的優(yōu)點,而且也是蘋果官方提倡大家使用的,為了性能,為了更多的特性,建議初次搭建的朋友采用 WKWebView。
為了實現(xiàn) h5 與 native 之間的互相調(diào)用,我們需要在兩者之間架一層橋來實現(xiàn),關于 bridge,之前的文章也有介紹。
bridge 的功能包括:native 調(diào)用 h5,h5 回調(diào) native,h5 調(diào)用 native,native 回調(diào) h5。
有了 bridge,h5可以使用 native 支持的更多特性,native 可以獲取 h5 頁面加載的信息,也可以讓 web 頁面動態(tài)執(zhí)行一些腳本做一些事。
總之,在 web 容器框架中,這個 bridge 還是很有必要的。
嗯,這個是輔助項,做了這一步可以進一步提高 web 容器的加載性能,而且資源緩存到本地后可以做到不依賴網(wǎng)絡,提高用戶體驗。
通常有兩種做法,
UIWebView 使用簡單,而且現(xiàn)在用戶的手機性能也已經(jīng)不再是頁面展示性能的瓶頸,所以,這里介紹的依然采用 UIWebView 作為 web 瀏覽器。
WebViewJavascriptBridge 是一款非常強大的第三方開源 bridge 庫,同時支持 UIWebView 和 WKWebView。
git 地址
NJKWebViewProgress 是一款能使 UIWebview 顯示加載進度的第三方開源框架,支持代理協(xié)議處理和 progressview 展示兩種功能。
git 地址
在點擊push下一個頁面時,因為各種原因,點一下cell或按鈕沒有響應,用戶可能就多點幾下,這時候會打開好幾個一樣的頁面。
這是因為push后的頁面有耗時操作或者剛好push到另一個頁面時,另一個頁面正好在reloadData卡住主線程。造成點擊cell時卡住了。
這時,我們可以通過重寫導航控制器的方法來解決這個問題。
#import UIKit/UIKit.h
@interfaceNaviViewController?:?UINavigationController
@end
#import "NaviViewController.h"
@interfaceNaviViewController?()
//?記錄push標志
@property(nonatomic,getter=isPushing)BOOLpushing;
@end
@implementationNaviViewController
-?(void)viewDidLoad?{
? ? ? [superviewDidLoad];
? ? ? ?self.delegate=self;
}
-?(void)pushViewController:(UIViewController*)viewControlleranimated:(BOOL)animated?{
? ? if(self.pushing==YES)?{
? ? ? ? ? ? ?NSLog(@"被攔截");
? ? ? ? ? ? ?return;
? ? }else{
? ? ? ? ? ? ?NSLog(@"push");
? ? ? ? ? ? ?self.pushing=YES;
? ? }
[superpushViewController:viewControlleranimated:animated];
}
#pragma?mark?-?UINavigationControllerDelegate
-(void)navigationController:(UINavigationController*)navigationControllerdidShowViewController:(UIViewController*)viewControlleranimated:(BOOL)animated?{
? ? ? ? ?self.pushing=NO;
}
@end