NJKWebViewProgress實(shí)現(xiàn)分析

NJKWebViewProgress是一個(gè)能使UIWebview顯示加載進(jìn)度的第三方控件。在網(wǎng)上以“UIWebview+進(jìn)度”為關(guān)鍵字搜索,NJKWebViewProgress是前幾名的解決方法。

以下分析該控件的實(shí)現(xiàn)方式。


NJKWebViewProgress目錄結(jié)構(gòu)

使用方式

@property(weak,nonatomic) UIWebView *uiwebView;

@property(strong,nonatomic,readwrite) NJKWebViewProgressView *progressView;

@property(strong,nonatomic,readwrite) NJKWebViewProgress *progressProxy;

- (void)configProgress {

self.progressProxy= [[NJKWebViewProgressalloc]init];

self.uiwebView.delegate=self.progressProxy;

self.progressProxy.webViewProxyDelegate=self;

self.progressProxy.progressDelegate=self;

CGRect barFrame = ...;

self.progressView= [[NJKWebViewProgressViewalloc]initWithFrame:barFrame];

[destView addSubview:self.progressView];

}

#pragma mark - NJKWebViewProgressDelegate

-(void)webViewProgress:(NJKWebViewProgress*)webViewProgress updateProgress:(float)progress

{

[self.progressView setProgress:progress animated:YES];

}

使用方法很簡(jiǎn)單,大意是

設(shè)置UIWebVIew的delegate為progressProxy

設(shè)置progressProxy.webViewProxyDelegate為self

設(shè)置progressProxy.progressDelegate為self

將progressView添加到需要的位置

通過(guò)progressProxy.progressDelegate的實(shí)現(xiàn)方法,在self中修改progressView的progress值

實(shí)現(xiàn)分析

從上文的使用方法中,已經(jīng)能看出progressProxy提供progress值,progressView顯示progress值,所以只需分析progressProxy如何得到進(jìn)度即可。

@property(nonatomic, njk_weak) id<UIWebViewDelegate> webViewProxyDelegate;

可以發(fā)現(xiàn),使用的仍然是UIWebView的代理方法。而UIWebView本身是沒(méi)有提供進(jìn)度查詢方法的,所以NJKWebViewProgress在這里又是怎么解決這個(gè)問(wèn)題的呢?

const float NJKInitialProgressValue =0.1f;

const float NJKInteractiveProgressValue =0.5f;

const float NJKFinalProgressValue =0.9f;


NJKWebViewProgress 大致實(shí)現(xiàn)圖

分析代碼以后,發(fā)現(xiàn)其中的實(shí)現(xiàn)大致如上圖所示。按照具體情況將進(jìn)度設(shè)置為

0->0.1->(0.5->)0.9->1

是一個(gè)根據(jù)狀態(tài)來(lái)決定當(dāng)前進(jìn)度的實(shí)現(xiàn)思路。


總結(jié)

雖然NJKWebViewProgress從本質(zhì)來(lái)說(shuō)是一個(gè)假進(jìn)度條,但是它的顯示效果確實(shí)不錯(cuò)。使用方便,擴(kuò)展性強(qiáng),而且能使用cocoaPods管理,是一個(gè)非常不錯(cuò)的控件。


以上僅是個(gè)人理解,如果有謬誤,請(qǐng)指正!

00000003

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容