国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS開發(fā)之點(diǎn)擊UIWebView獲取被點(diǎn)擊圖片的地址并顯示

2019-11-09 17:14:36
字體:
供稿:網(wǎng)友

加載網(wǎng)頁時(shí),有時(shí)候產(chǎn)品經(jīng)理會(huì)提出一個(gè)需求:點(diǎn)擊界面的圖片,可以進(jìn)行查看大圖操作。下面說下我的實(shí)現(xiàn)思路:

給 UIWebView 添加 tap手勢 ,利用手勢的代理方法

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

可以獲取到手指點(diǎn)擊觸點(diǎn)在界面的位置,再使用 JS 可以獲取到該點(diǎn)顯示的元素,這樣就可以獲取到 img 標(biāo)簽,拿到圖片的地址。但是,這個(gè)方法是只要有手勢就會(huì)響應(yīng),也就是說,只要你的手指在界面上面移動(dòng)就會(huì)觸發(fā),如果說,這個(gè)時(shí)候你就將拿到的圖片地址用來顯示,就會(huì)出現(xiàn)在滑動(dòng)的過程中展示大圖,這個(gè)效果肯定是不符合交互過程的。那么使用這個(gè)方法我們能夠做什么呢?明顯的是,我們可以拿到圖片的鏈接,但是這個(gè)方法調(diào)用的頻率很高,這里需要過濾

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {        if (gestureRecognizer == self.af_customTap) {            CGPoint touchPoint = [touch locationInView:self];            NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", touchPoint.x, touchPoint.y];            NSString *URLString = [self stringByEvaluatingjavaScriptFromString:imgURL];            self.af_isClickImage = @(NO);            if (URLString && URLString.length > 0) {                self.af_isClickImage = @(YES);                self.af_imageString = URLString;            }        }    }    return YES;}

這個(gè)過濾可以做到拿到最近的圖片的地址,簡單來說就是拿到我們想要顯示的圖片的地址,那么現(xiàn)在的問題就是顯示圖片的時(shí)機(jī)。這個(gè)方法的任務(wù)已經(jīng)完成了,所以我就再次去  UIGestureRecognizerDelegate 找有有關(guān)的代理方法,發(fā)現(xiàn)只有在這個(gè) 

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

方法中做文章了,沒錯(cuò)就是在這個(gè)方法中實(shí)現(xiàn)回調(diào)。具體的代碼也十分簡單,注意這里我們返回的是 NO 因?yàn)槲覀兪褂眠@個(gè)手勢,實(shí)質(zhì)上面是獲取手指在界面上面滑動(dòng)獲取位置,并不是需要添加手勢事件。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{    if (gestureRecognizer == self.af_customTap) {        if (self.af_imageString && [self.af_isClickImage boolValue]) {            !self.af_clickImage ? : self.af_clickImage(self.af_imageString);            self.af_imageString = nil;        }        return NO; /// 這里返回 NO 不需要響應(yīng)手勢    }    return YES;}現(xiàn)在我們看看頭文件的內(nèi)容:

/// 點(diǎn)擊圖片回調(diào) 返回被點(diǎn)擊圖片的地址字符串-(void)af_didClickImageCall:(void(^)(NSString* URLString)) clickImage;

就是需要的獲取 webView 中的圖片時(shí),使用這個(gè)方法,回調(diào)的 Block 會(huì)將對應(yīng)的圖片地址給你。這個(gè)回調(diào)方法中寫展示大圖的邏輯;完整的代碼我會(huì)上傳我的github,前面的博客中有地址,大家也可以聯(lián)系我,直接發(fā)給你。微博:哈嘍ExpecT、QQ:1156154406、微信:hmh5896...

存在的不足:實(shí)現(xiàn)上面是添加了一個(gè) tap手勢(這個(gè)手勢不會(huì)影響 webView 原有手勢的響應(yīng)),但是,對于 web 頁面的所有圖片都會(huì)有回調(diào),可能在某些使用場景下需要過濾一些圖片,例如頭像之類的小圖片。這個(gè)還需要使用者自己修改相關(guān)的 JS 代碼,過濾網(wǎng)頁的某些圖片標(biāo)簽。或者,拿到圖片地址之后做相應(yīng)的過濾操作。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临潭县| 普安县| 衡山县| 柯坪县| 石楼县| 元朗区| 普定县| 蓬安县| 汶上县| 浦江县| 瓮安县| 九台市| 招远市| 峨眉山市| 临城县| 惠安县| 泸定县| 蒲城县| 科技| 观塘区| 金昌市| 驻马店市| 临澧县| 南宁市| 石棉县| 基隆市| 道孚县| 兰考县| 交城县| 伽师县| 景洪市| 肇源县| 金阳县| 探索| 洮南市| 即墨市| 常宁市| 泰州市| 侯马市| 大同市| 葵青区|