IOS圖片瀏覽器 - 基于UIWebview

最近項(xiàng)目需要實(shí)現(xiàn)一個(gè)圖片瀏覽器的功能,要求也很常規(guī),如下:
1、具有彈出、收起動(dòng)畫(huà)
2、在第N張圖片收起圖片瀏覽器時(shí),容器內(nèi)容要求定位在該圖片的顯示位置
3、流暢
最終實(shí)現(xiàn)效果如下:

2016-12-29 14_37_37.gif

由于項(xiàng)目中的文章頁(yè)面使用H5渲染,所以解決思路如下:
1、js通知native所需要顯示的圖片url數(shù)組、index(當(dāng)前點(diǎn)擊的圖片索引)、rect(當(dāng)前點(diǎn)擊圖片的區(qū)域位置)
2、native在關(guān)閉圖片瀏覽器時(shí),通知js當(dāng)前查看的圖片index(js根據(jù)index跳轉(zhuǎn)到網(wǎng)頁(yè)對(duì)應(yīng)位置),js回調(diào)native通知當(dāng)前圖片的rect(用于native播放收起動(dòng)畫(huà))
期間遇到一個(gè)問(wèn)題:
native并沒(méi)有webview中已加載的圖片資源,所以彈出動(dòng)畫(huà)難免出現(xiàn)加載過(guò)程,影響體驗(yàn)
解決方案如下:
注冊(cè)NSURLProtocol,監(jiān)聽(tīng)webview中所有的圖片請(qǐng)求,并用SDWebImage緩存,以u(píng)rl為key,搞定。

- (void)startLoading {
    NSURLSession *session = [NSURLSession sharedSession];
    NSMutableURLRequest *request = [self.request mutableCopy];
    [NSURLProtocol setProperty:@(YES) forKey:kProtocolHandledKey inRequest:request];
    
    __weak typeof(self) weakSelf = self;
    
    self.sessionTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (error) {
            return;
        }
        NSString *mimeType = response.MIMEType;
        if ([mimeType hasPrefix:@"image"]) {
            NSString *url = weakSelf.request.URL.absoluteString;
            SDImageCache *cache = [SDImageCache sharedImageCache];
            [cache storeImage:[UIImage imageWithData:data] forKey:url toDisk:NO];
        }
        
        [weakSelf.client URLProtocol:weakSelf didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowedInMemoryOnly];
        [weakSelf.client URLProtocol:weakSelf didLoadData:data];
        [weakSelf.client URLProtocolDidFinishLoading:weakSelf];
    }];
    [self.sessionTask resume];
}
最后編輯于
?著作權(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)容