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

首頁 > 系統 > iOS > 正文

iOS開發之點擊UIWebView獲取被點擊圖片的地址并顯示

2019-11-09 16:05:08
字體:
來源:轉載
供稿:網友

加載網頁時,有時候產品經理會提出一個需求:點擊界面的圖片,可以進行查看大圖操作。下面說下我的實現思路:

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

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

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

-(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;}

這個過濾可以做到拿到最近的圖片的地址,簡單來說就是拿到我們想要顯示的圖片的地址,那么現在的問題就是顯示圖片的時機。這個方法的任務已經完成了,所以我就再次去  UIGestureRecognizerDelegate 找有有關的代理方法,發現只有在這個 

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

方法中做文章了,沒錯就是在這個方法中實現回調。具體的代碼也十分簡單,注意這里我們返回的是 NO 因為我們使用這個手勢,實質上面是獲取手指在界面上面滑動獲取位置,并不是需要添加手勢事件。

- (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 不需要響應手勢    }    return YES;}現在我們看看頭文件的內容:

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

就是需要的獲取 webView 中的圖片時,使用這個方法,回調的 Block 會將對應的圖片地址給你。這個回調方法中寫展示大圖的邏輯;完整的代碼我會上傳我的github,前面的博客中有地址,大家也可以聯系我,直接發給你。微博:哈嘍ExpecT、QQ:1156154406、微信:hmh5896...

存在的不足:實現上面是添加了一個 tap手勢(這個手勢不會影響 webView 原有手勢的響應),但是,對于 web 頁面的所有圖片都會有回調,可能在某些使用場景下需要過濾一些圖片,例如頭像之類的小圖片。這個還需要使用者自己修改相關的 JS 代碼,過濾網頁的某些圖片標簽?;蛘?,拿到圖片地址之后做相應的過濾操作。


上一篇:iOS 刷新動畫

下一篇:iOS UIRefreshControl

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霍林郭勒市| 左权县| 婺源县| 仙桃市| 乐山市| 庆元县| 云和县| 张家港市| 波密县| 桑植县| 澄江县| 全椒县| 长丰县| 庄河市| 连城县| 奉化市| 闵行区| 共和县| 沅陵县| 济阳县| 龙胜| 出国| 仙游县| 宜春市| 开远市| 泗阳县| 普兰店市| 安远县| 葫芦岛市| 高碑店市| 呼和浩特市| 平陆县| 揭西县| 长岛县| 龙江县| 纳雍县| 天等县| 张家港市| 邻水| 新竹县| 饶河县|