亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

捏合與拖動手勢實現視圖的縮放拖動 以及 任一邊界拖進屏幕自動回彈

2019-11-07 23:58:38
字體:
來源:轉載
供稿:網友

實現這個功能也是被逼無奈,項目需要縮放移動有很多小頁簽的WKWebView,嘗試了UIScrollView,但是很不理想,因為webview需要側滑和上下滑動,所以縮放拖動絕大部分都無法觸發,只得采用手勢實現。在網上查閱了大量資料,終于實現了該功能,廢話不多說,上代碼:

1、定義縮放倍數和偏移量

// 縮放倍數#define minScale 1#define maxScale 2// 偏移量#define Offset 0

2、定義需要用到的屬性

@PRoperty (nonatomic,strong) UIImageView *imgView;// 要縮放的視圖// 縮放@property (nonatomic, assign) CGFloat lastScale;// 上一次縮放的比例@property (nonatomic, strong) UipinchGestureRecognizer *pinch;// 捏合手勢@property (nonatomic, strong) UIPanGestureRecognizer *pan;// 平移手勢

3、初始化視圖、手勢,并設置手勢

_imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2.jpg"]]; _imgView.frame = self.view.frame; _imgView.userInteractionEnabled = YES; [self.view addSubview:_imgView]; _pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)]; _pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)]; [_imgView addGestureRecognizer:_pinch]; [_imgView addGestureRecognizer:_pan];

4、 設置錨點

- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer{ //UIGestureRecognizerStateBegan意味著手勢已經被識別 if (gestureRecognizer.state ==UIGestureRecognizerStateBegan) { //手勢發生在哪個view上 UIView *piece = gestureRecognizer.view; //獲得當前手勢在view上的位置。 CGPoint locationInView = [gestureRecognizer locationInView:piece]; piece.layer.anchorPoint =CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height); //根據在view上的位置設置錨點。 //防止設置完錨點過后,view的位置發生變化,相當于把view的位置重新定位到原來的位置上。 CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview]; piece.center = locationInSuperview; }}

5、 縮放方法

- (void)pinchAction:(UIPinchGestureRecognizer *)gestureRecognizer{ UIGestureRecognizerState state = [gestureRecognizer state]; if(state == UIGestureRecognizerStateBegan) { _lastScale = [gestureRecognizer scale]; } if (gestureRecognizer.scale > 1) { [self adjustAnchorPointForGestureRecognizer:gestureRecognizer]; }else{ _imgView.layer.anchorPoint =CGPointMake(0.5, 0.5); _imgView.center = self.view.center; } CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue]; if (state == UIGestureRecognizerStateBegan || state == UIGestureRecognizerStateChanged) { CGFloat newScale = 1 - (_lastScale - [gestureRecognizer scale]); newScale = MIN(newScale, maxScale / currentScale); newScale = MAX(newScale, minScale / currentScale); CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale); NSLog(@"newScale = %f,currentScale = %f",newScale,currentScale); [gestureRecognizer view].transform = transform; _lastScale = [gestureRecognizer scale]; } if (state == UIGestureRecognizerStateEnded) { if (currentScale >= minScale && currentScale <= minScale + 0.1) { [_imgView removeGestureRecognizer:_pan]; }else if(currentScale > minScale + 0.1 && currentScale <= maxScale){ [_imgView addGestureRecognizer:_pan]; } }}

6、 拖動方法

- (void)panAction:(UIPanGestureRecognizer *)gestureRecognizer{ if (gestureRecognizer.state == UIGestureRecognizerStateBegan || gestureRecognizer.state == UIGestureRecognizerStateChanged) { if (!(_imgView.frame.origin.x == 0 && _imgView.frame.origin.y == 0 && _imgView.frame.size.width == self.view.frame.size.width && _imgView.frame.size.height == self.view.frame.size.height)) { CGPoint translation = [gestureRecognizer translationInView:self.view]; gestureRecognizer.view.center = CGPointMake(gestureRecognizer.view.center.x + translation.x, gestureRecognizer.view.center.y + translation.y); [gestureRecognizer setTranslation:CGPointZero inView:self.view]; } } CGRect rect = _imgView.frame; if (_imgView.frame.origin.x > 0 + Offset) {//左邊進入屏幕 NSLog(@"左邊進入屏幕"); [UIView animateWithDuration:0.25 animations:^{ CGPoint point = CGPointMake(gestureRecognizer.view.center.x - gestureRecognizer.view.frame.origin.x, gestureRecognizer.view.center.y); gestureRecognizer.view.center = point; }]; }else if (CGRectGetMaxX(rect) < self.view.frame.size.width + Offset){ NSLog(@"右邊進入屏幕"); [UIView animateWithDuration:0.25 animations:^{ CGRect newRect = CGRectOffset(_imgView.frame, self.view.frame.size.width - CGRectGetMaxX(_imgView.frame), 0); _imgView.frame = newRect; }]; } if (_imgView.frame.origin.y > 0 + Offset) {//上邊進入屏幕 NSLog(@"上邊進入屏幕"); [UIView animateWithDuration:0.25 animations:^{ CGPoint point = CGPointMake(gestureRecognizer.view.center.x, gestureRecognizer.view.center.y - gestureRecognizer.view.frame.origin.y); gestureRecognizer.view.center = point; }]; }else if(CGRectGetMaxY(rect) < self.view.frame.size.height + Offset){ NSLog(@"下邊進入屏幕"); [UIView animateWithDuration:0.25 animations:^{ CGRect newRect = CGRectOffset(_imgView.frame, 0, self.view.frame.size.height - CGRectGetMaxY(_imgView.frame)); _imgView.frame = newRect; }]; }}

手勢實現也是萬不得已才用的,如果有哪位大神解決了UIScrollView縮放有多個側滑頁簽,并且可以上下滑動的WKWebView,請給我留言,相互交流,萬分感謝。

轉載請注明出處,萬分感謝!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av大片在线| 国产精品1区2区在线观看| 国产精品 欧美在线| x99av成人免费| 日韩美女中文字幕| 亚洲午夜精品久久久久久性色| 亚洲精品v欧美精品v日韩精品| 国产精品白嫩初高中害羞小美女| 久久视频中文字幕| 色久欧美在线视频观看| www.xxxx欧美| 亚洲综合第一页| 亚洲成人三级在线| 国产日韩在线一区| 97在线视频免费播放| 色噜噜国产精品视频一区二区| 亚洲福利小视频| 国产精品免费一区豆花| 91久久国产精品91久久性色| 日韩免费在线免费观看| 久久久视频精品| 久久中国妇女中文字幕| 国产一区二区三区网站| 久久久噜噜噜久久| 欧美寡妇偷汉性猛交| 亚洲影院色在线观看免费| 亚洲电影中文字幕| 亚洲国产高潮在线观看| 成人性生交大片免费看小说| 91精品国产91久久久久| 国产精品免费观看在线| 亚洲自拍小视频| 国产精品免费一区豆花| 日韩av在线影视| 国产中文日韩欧美| 日韩视频免费看| 国产婷婷97碰碰久久人人蜜臀| 精品久久久精品| 欧美xxxx18性欧美| 国产成人涩涩涩视频在线观看| 欧美极品美女视频网站在线观看免费| 狠狠躁18三区二区一区| 成人激情综合网| 97精品国产97久久久久久| 亚洲成人久久网| 亚洲偷欧美偷国内偷| 国内精品视频在线| 红桃视频成人在线观看| 亚洲区一区二区| 亚洲综合精品一区二区| 欧美贵妇videos办公室| 欧美精品videos性欧美| 国产日本欧美视频| 国产精品1234| 亚洲区bt下载| 亚洲国产欧美一区二区丝袜黑人| 97**国产露脸精品国产| 亚洲香蕉成视频在线观看| 欧美一区二区三区图| 国产在线精品自拍| 亚洲精品久久久久久下一站| 日韩在线免费视频| 国产精品久久久久久搜索| 日韩av大片免费看| 亚洲精选在线观看| 亚洲精品动漫久久久久| 欧美一区二区影院| 欧美在线视频在线播放完整版免费观看| 精品久久久久久久久久ntr影视| 国产成人免费av电影| 97视频色精品| 秋霞成人午夜鲁丝一区二区三区| 亚洲区在线播放| 国产精品久久二区| 日韩中文字幕国产| 亚洲男人天天操| 青青青国产精品一区二区| 夜夜嗨av一区二区三区免费区| 黄色精品在线看| 精品美女久久久久久免费| www.久久色.com| 性亚洲最疯狂xxxx高清| 国产在线拍偷自揄拍精品| 性欧美视频videos6一9| 精品国产欧美一区二区五十路| 麻豆精品精华液| 欧美夜福利tv在线| 欧美一区二区三区免费观看| 欧美三级免费观看| 欧美电影免费观看高清| 欧美电影免费观看网站| 亚洲美女精品成人在线视频| 亚洲欧美一区二区激情| 成人福利免费观看| 国产综合久久久久| 91精品国产精品| 久久久亚洲欧洲日产国码aⅴ| 久久综合久久88| 亚洲最大成人网色| 亚洲欧美日韩直播| 国产精品视频免费在线观看| 国产成人精品一区| 中文字幕亚洲欧美日韩2019| 国产亚洲精品久久久久久牛牛| 亚洲码在线观看| 久久91精品国产91久久久| 日韩av在线免费播放| 日韩国产高清污视频在线观看| 亚洲香蕉av在线一区二区三区| 亚洲精品国产成人| 欧美激情在线狂野欧美精品| 欧美成年人视频网站| 成人午夜小视频| 日韩av中文字幕在线免费观看| 亚洲第一中文字幕在线观看| 精品久久久精品| 国产噜噜噜噜噜久久久久久久久| 欧美日韩国产成人在线| 日韩美女激情视频| 国产欧美久久久久久| 欧美国产日韩一区二区在线观看| 青草热久免费精品视频| 日韩免费在线观看视频| 日韩日本欧美亚洲| 中文字幕在线看视频国产欧美| 日韩a**中文字幕| 国产精品久久久久aaaa九色| 热门国产精品亚洲第一区在线| www欧美xxxx| 日韩动漫免费观看电视剧高清| 97视频免费在线观看| 日韩成人激情在线| 日韩视频―中文字幕| 日韩在线观看免费高清| 久久亚洲综合国产精品99麻豆精品福利| 欧美亚洲成人网| 久久久久久久国产精品视频| 亚洲精品日韩激情在线电影| 国产成人在线精品| 国产亚洲成精品久久| 亚洲国产高清福利视频| 欧美成人黄色小视频| 国内偷自视频区视频综合| 国产成人自拍视频在线观看| 91亚洲精品一区二区| 亚洲第一中文字幕| 国产v综合v亚洲欧美久久| 国产一区二中文字幕在线看| 国产精品免费福利| 97久久精品人人澡人人爽缅北| 亚洲欧美日韩爽爽影院| 97在线看免费观看视频在线观看| 欧美激情亚洲激情| 成人淫片在线看| 亚洲欧美国产制服动漫| 国产精品主播视频| 国产亚洲精品日韩| 欧美性开放视频| 91综合免费在线| 欧美日韩国产精品一区| 精品国产一区二区三区久久狼5月| 欧美黄色免费网站| 97在线免费观看| 九九热视频这里只有精品|