封裝一個WKWebView(帶進度條)

0C25136F-76CF-4F1A-91BB-6466CE5D45D3.png

二話不說,先丟效果圖????料滥。

最近用hud感覺界面不美觀然眼,而且加載頁面的視覺速度覺得特別慢艾船,就寫了個基于WKWebView的進度條葵腹,分享給大家高每,不多說,直接上干貨

#import <UIKit/UIKit.h>

@interface WWJ_WKWebView : UIView
/**
 *  進度條的顏色
 */
@property (strong, nonatomic) UIColor *progressColor;

- (instancetype)initWithUrl:(NSURL *)url;

@end
#import "WWJ_WKWebView.h"
#import <WebKit/WebKit.h>
#import <objc/runtime.h>
NSString *const progressColorKey = @"progressColorKey";
@interface WWJ_WKWebView ()

@property (strong, nonatomic) CALayer *progresslayer;

@end

@implementation WWJ_WKWebView

- (void)initWithDefault{
    self.progressColor = [UIColor colorWithRed:22.f / 255.f green:126.f / 255.f blue:251.f / 255.f alpha:.8];;
}

- (void)initWithProgressView{
    UIView *progress = [[UIView alloc]initWithFrame:CGRectMake(0, 64, CGRectGetWidth(self.frame), 3)];
    progress.backgroundColor = [UIColor clearColor];
    [self addSubview:progress];
    CALayer *layer = [CALayer layer];
    layer.frame = CGRectMake(0, 0, 0, 3);
    layer.backgroundColor = self.progressColor.CGColor;
    [progress.layer addSublayer:layer];
    self.progresslayer = layer;
}

- (UIColor *)progressColor{
    return objc_getAssociatedObject(self, &progressColorKey);
}

- (void)setProgressColor:(UIColor *)progressColor{
    objc_setAssociatedObject(self, &progressColorKey, progressColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [self initWithProgressView];
}

- (instancetype)initWithUrl:(NSURL *)url{
    self = [super initWithFrame:[UIScreen mainScreen].bounds];
    if (self) {
        WKWebView *webView = [[WKWebView alloc]initWithFrame:[UIScreen mainScreen].bounds];
        //添加觀察者,觀察wkwebview的estimatedProgress屬性
        [webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
        [self addSubview:webView];
        [webView loadRequest:[NSURLRequest requestWithURL:url]];
        [self initWithDefault];
        [self initWithProgressView];
    }
    return self;
}

- (void)dealloc{
    [(WKWebView *)self removeObserver:self forKeyPath:@"estimatedProgress"];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"estimatedProgress"]) {
        self.progresslayer.opacity = 1;
        //不要讓進度條倒著走...有時候goback會出現(xiàn)這種情況
        if ([change[@"new"] floatValue] < [change[@"old"] floatValue]) {
            return;
        }
        self.progresslayer.frame = CGRectMake(0, 0, self.bounds.size.width * [change[@"new"] floatValue], 3);
        if ([change[@"new"] floatValue] == 1) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                self.progresslayer.opacity = 0;
            });
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                self.progresslayer.frame = CGRectMake(0, 0, 0, 3);
            });
        }
    }else{
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

@end

之后調(diào)用就十分簡單了

WWJ_WKWebView *webView = [[WWJ_WKWebView alloc] initWithUrl:[NSURL URLWithString:@"http://shaozi.info"]];
    webView.progressColor = [UIColor orangeColor];
    [self.view addSubview:webView];

最后丟一張效果的gif

progress.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末践宴,一起剝皮案震驚了整個濱河市鲸匿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阻肩,老刑警劉巖带欢,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烤惊,居然都是意外死亡乔煞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門柒室,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渡贾,“玉大人,你說我怎么就攤上這事雄右】丈В” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵擂仍,是天一觀的道長囤屹。 經(jīng)常有香客問我,道長逢渔,這世上最難降的妖魔是什么肋坚? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮复局,結(jié)果婚禮上冲簿,老公的妹妹穿的比我還像新娘。我一直安慰自己亿昏,他們只是感情好峦剔,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著角钩,像睡著了一般吝沫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上递礼,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天惨险,我揣著相機與錄音,去河邊找鬼脊髓。 笑死辫愉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的将硝。 我是一名探鬼主播恭朗,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼屏镊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痰腮?” 一聲冷哼從身側(cè)響起而芥,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膀值,沒想到半個月后棍丐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡沧踏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年歌逢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘狱。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡趋翻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盒蟆,到底是詐尸還是另有隱情踏烙,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布历等,位于F島的核電站讨惩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寒屯。R本人自食惡果不足惜荐捻,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寡夹。 院中可真熱鬧处面,春花似錦、人聲如沸菩掏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽智绸。三九已至野揪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞧栗,已是汗流浹背斯稳。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迹恐,地道東北人挣惰。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憎茂。 傳聞我的和親對象是個殘疾皇子唆涝,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件唇辨、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,107評論 4 62
  • “我這一生會遇見許多姑娘,無論以前或者以后能耻,都會隨時遇見赏枚,但還能讓我死心塌地愛上的,估計沒有了晓猛,除了劉曉嬌饿幅,不可能...
    月零星閱讀 789評論 0 1
  • 為何你與別人的差距如此之大,因為你在看戒职,他早已完成栗恩,這就是效率帶來的影響。 今天自由寫作空間的Rita邀請雞血學(xué)院...
    海豚的世界閱讀 534評論 0 0
  • 親愛的朋友們大家好!我是網(wǎng)絡(luò)驕陽捧韵,今天給大家?guī)硪豢睢峨u蛋餅》市咆,這是一款非常不錯的早餐,這款早餐一定會受到家人的歡...
    feaf5a1303da閱讀 524評論 14 36