国产探花免费观看_亚洲丰满少妇自慰呻吟_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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天峻县| 太仓市| 英山县| 广南县| 保德县| 改则县| 郑州市| 吉安县| 黔西| 江油市| 平顺县| 宜宾县| 龙山县| 洛阳市| 台州市| 门源| 屯门区| 博野县| 伊宁县| 濮阳县| 宝兴县| 防城港市| 万年县| 米泉市| 浦城县| 东乡| 衡阳市| 前郭尔| 鄂伦春自治旗| 祁门县| 金门县| 寻乌县| 铁岭市| 青田县| 瑞丽市| 上虞市| 万源市| 公安县| 湟源县| 鸡东县| 新建县|