微信电脑端双击不能放大图片怎么回事_IOS 微信 聊天双击放大图片操作
单击图片放大,浏览图片细节,之后再单击回到原始页面,
如果在浏览细节时候,双击图片 会局部放大,也可以双手拖拽放大,
newImage.gif
代码参考
#import "TransImageTool.h"
#define kSCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define kSCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
#define kMaxZoom 3
@interface TransImageTool ()
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) BOOL isTwiceTaping;
@property (nonatomic, assign) BOOL isDoubleTapingForZoom;
@property (nonatomic, assign) CGFloat currentScale;
@property (nonatomic, assign) CGFloat offsetY;
@property (nonatomic, assign) CGFloat touchX;
@property (nonatomic, assign) CGFloat touchY;
@property (nonatomic, strong) UIImageView *transImageView;
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIView *backView;
@property (nonatomic, strong) UIButton *userBtn ;
@property (nonatomic, strong) UIView *userBtnContainer ;
@end
static CGRect oldframe;
@implementation TransImageTool
- (void)showImage:(UIImageView *)avatarImageView{
UIImage *image = avatarImageView.image;
UIWindow *window = [UIApplication sharedApplication].keyWindow;
oldframe = [avatarImageView convertRect:avatarImageView.bounds toView:window];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:oldframe];
imageView.image = image;
self.transImageView = imageView;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kSCREEN_WIDTH, kSCREEN_HEIGHT)];
scrollView.delegate = self;
scrollView.backgroundColor = [UIColor blackColor];
scrollView.maximumZoomScale = 5.0;
CGFloat ratio = _width / _height * kSCREEN_HEIGHT / kSCREEN_WIDTH;
CGFloat min = MIN(ratio, 1.0);
scrollView.minimumZoomScale = min;
self.scrollView = scrollView;
UITapGestureRecognizer *onetap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideImage:)];
[self.scrollView addGestureRecognizer:onetap];
[self.scrollView addSubview:imageView];
UITapGestureRecognizer *tapImgViewTwice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImgViewHandleTwice:)];
tapImgViewTwice.numberOfTapsRequired = 2;
tapImgViewTwice.numberOfTouchesRequired = 1;
[scrollView addGestureRecognizer:tapImgViewTwice];
//如果双击失败就单击
[onetap requireGestureRecognizerToFail:tapImgViewTwice];
[window addSubview:self.scrollView];
CGFloat imageViewX = 0;
CGFloat imageViewY = (kSCREEN_HEIGHT - image.size.height*kSCREEN_WIDTH/image.size.width) / 2;
CGFloat imageViewW = kSCREEN_WIDTH;
CGFloat imageViewH = image.size.height * kSCREEN_WIDTH/image.size.width;
[UIView animateWithDuration:0.3
animations:^
{
imageView.frame = CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);
}
completion:^(BOOL finished)
{
}];
}
- (void)hideImage:(UITapGestureRecognizer*)tap
{
UIView *backgroundView = tap.view;
self.userBtnContainer.alpha = 0;
[UIView animateWithDuration:0.3
animations:^
{
self.transImageView.frame = oldframe;
self.scrollView.alpha = 0;
}
completion:^(BOOL finished)
{
[backgroundView removeFromSuperview];
[self.scrollView removeFromSuperview];
[self.userBtnContainer removeFromSuperview];
}];
}
#pragma mark - UIScrollViewDelegate -
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
self.currentScale = scale;
}
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return self.transImageView;
}
-(void)scrollViewDidZoom:(UIScrollView *)scrollView
{
CGFloat xcenter = scrollView.center.x;
CGFloat ycenter = scrollView.center.y;
xcenter = scrollView.contentSize.width > kSCREEN_WIDTH?scrollView.contentSize.width / 2 : xcenter;
ycenter = scrollView.contentSize.height > kSCREEN_HEIGHT ?scrollView.contentSize.height / 2 : ycenter;
if(_isDoubleTapingForZoom)//是否是双击放大的
{
if (_touchX>0 && _touchY>0)
{
//点击在图片上
CGFloat transformX = _touchX * kMaxZoom;
CGFloat transformY = _touchY * kMaxZoom;
CGFloat contentW = scrollView.contentSize.width;
CGFloat contentH = scrollView.contentSize.height;
if (transformX + kSCREEN_WIDTH *.5>=contentW)
{
//右边太大。
transformX = kSCREEN_WIDTH*(kMaxZoom-1);
}
else
{
if (transformX-kSCREEN_WIDTH *.5 < 0)
{//左边太小
transformX = 0;
}
else
{
transformX = transformX-kSCREEN_WIDTH *0.5;
}
}
//计算Y
//Y的放大比例跟图片的本身有关,需要从新计算内容的高度和屏幕的尺寸关系
int maxCount = contentH /([UIScreen mainScreen].bounds.size.height);
if (maxCount >= 1)
{
//智能移动到中心
if (transformY-contentH *0.5 < 0)
{
//上边太小,智能移动到边界
transformY = 0;
}
else
{
if (transformY +kSCREEN_HEIGHT *.5 > contentH) {
//下边太大,智能移动到边界
transformY = contentH - kSCREEN_HEIGHT;
}
else
{
transformY = transformY - kSCREEN_HEIGHT *.5;
}
}
}
else
{
if (transformY-contentH *0.5 < 0)
{
//上边太小,智能移动到边界
transformY = 0;
}
else
{
//下边太大,智能移动到边界
transformY = ycenter - kSCREEN_HEIGHT*0.5;
}
}
[scrollView setContentOffset:CGPointMake(transformX, transformY)];
}
else
{
//默认放大位置
[scrollView setContentOffset:CGPointMake(xcenter- kSCREEN_WIDTH *.5, ycenter - kSCREEN_HEIGHT*0.5)];
}
}
[self.transImageView setCenter:CGPointMake(xcenter, ycenter)];
_touchY = 0;
_touchX = 0;
}
-(void)tapImgViewHandleTwice:(UIGestureRecognizer *)sender{
_touchX = [sender locationInView:self.transImageView].x;
_touchY = [sender locationInView:self.transImageView].y;
if (_touchY >CGRectGetHeight(self.transImageView.frame))
{
//如果大于最大的就是在图片外面,默认放大
_touchY = 0;
}
if(_isTwiceTaping)//双击
{
return;
}
_isTwiceTaping = YES;
if(_currentScale > 1.0)
{
_currentScale = 1.0;
[_scrollView setZoomScale:1.0 animated:YES];
}
else
{
_isDoubleTapingForZoom = YES;
_currentScale = kMaxZoom;
[_scrollView setZoomScale:kMaxZoom animated:YES];
}
_isDoubleTapingForZoom = NO;
//延时做标记判断,使用户点击3次时的单击效果不生效。
[self performSelector:@selector(twiceTaping) withObject:nil afterDelay:0.65];
}
-(void)twiceTaping{
_isTwiceTaping = NO;
}
//是否添加其他按钮
- (void)addTooBtnView
{
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 20, kSCREEN_WIDTH, 80)];
containerView.backgroundColor = [UIColor clearColor];
self.userBtnContainer = containerView;
// [window addSubview:containerView];
/*添加button*/
UIButton *userBtnright = [UIButton buttonWithType:UIButtonTypeSystem];
userBtnright.frame =CGRectMake(kSCREEN_WIDTH - 100, 0, 60, 30);
[userBtnright setTitle:@"正确" forState:UIControlStateNormal];
[userBtnright setBackgroundColor:[UIColor blueColor]];
self.userBtn = userBtnright;
//[containerView addSubview:userBtnright];
/*添加button*/
UIButton *userBtnerror = [UIButton buttonWithType:UIButtonTypeSystem];
userBtnerror.frame =CGRectMake(kSCREEN_WIDTH - 170, 0, 60, 30);
[userBtnerror setTitle:@"错误" forState:UIControlStateNormal];
[userBtnerror setBackgroundColor:[UIColor blueColor]];
self.userBtn = userBtnerror;
//[containerView addSubview:userBtnerror];
}
-(void)dealloc
{
NSLog(@"dealloc");
}
@end
微信电脑端双击不能放大图片怎么回事_IOS 微信 聊天双击放大图片操作相关推荐
- 微信电脑端多开操作 要开多少台就有多少台(电脑小白都会)
微信电脑端多开操作 要开多少台就有多少台 [电脑小白都会] 步骤一 步骤二 步骤三 步骤四 步骤五 步骤一 在桌面找到微信图标 步骤二 复制下面红色圈圈的路径 步骤三 在桌面新建一个txt文件,把刚刚 ...
- 微信电脑端-退出的群、删除的人,仍然可以查找或看到问题的解决方法
微信电脑端-退出的群.删除的人,仍然可以查找或看到问题的解决方法 我们经常会发现退了的群,还一打关键字会弹出来候选,即使清空聊天记录也不行.这是由于本地缓存了旧数据导致的. 电脑端解决办法: 1. 退 ...
- 微信电脑端程序多账号登录
很多人可能因为工作的缘故,有多个微信号.有时候一台电脑上需要登陆多个账号,同时在线聊天.只不过可惜的是,微信电脑版是不支持多开的,这给很多小伙伴带来了一些困扰. 系统迷在上次已经给大家分享了微信破解版 ...
- android微信朋友圈视频无法播放,微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?...
微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?最近微信更新,用户可以进行分享自己手机里的视频,这一举措受到很多人的喜欢.那么微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频 ...
- 怎么用计算机要微信,电脑端要实现“微信双开”功能,三种方法,简单实用!...
在我们的日常生活中,微信它已经不仅仅是一个聊天工具了,我们的许多工作很多时候也离不开它. 有时我们想把生活和工作分开,很多人都有两个微信号,一个工作号一个生活号:工作号用于工作日的业务,生活号用于日常 ...
- 微信电脑端【多开问题】+附赠,解决桌面图标变小白块问题
由于工作原因拥有几个微信号扩展业务,但是总不能备好几个手机把,也不能开好多模拟器会很麻烦,于是乎~,弄了一段多开代码,大大便捷了工作需求. 如上的 微信多开.bat 点击这个小logo就可以多开了!! ...
- 用计算机编程做微信,电脑端微信双开,教你两种简单的方法,上手即用!
这种方法简单粗暴,可以实现多开,但是多开的数量不容易控制. 首先我们选中桌面上的任一图标(文件或者程序),然后按住回车键,同时鼠标双击微信图标,双击以后仍需一直按着回车键. 打开今日头条,查看更多精彩 ...
- 苹果微信多开_简易版!微信电脑端多开方法!!!
点击上方"GitHub指南",星标公众号优秀文章,第一时间送达hello,大家好,这里是GitHub指南.有点好奇大家有几个微信号?不少小伙伴应该都有两个甚至多个微信号吧,为了避免 ...
- python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例
本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=UTF-8 import request ...
最新文章
- java远程线程注入_系统权限远程线程注入到Explorer.exe
- 不用一行代码,用 API 操作数据库,你信吗
- python性能分析工具模块_python——关于Python Profilers性能分析器
- .NET Core加解密实战系列之——消息摘要与数字签名算法
- 矢量合成和分解的法则_专题14 运动的合成与分解
- Hello World!!!
- 泉州海事学校计算机,泉州海事学校寝室图片、校园环境好吗?
- 企业销售管理现状分析与解决思路(转)
- Palo Alto Networks 升级Traps高级终端防护产品 提升终端安全防护水平
- 聊聊加拿大的工作和生活
- 紫书刷题记录 UVa12100 打印队列
- python的语言是开源的_python语音识别 开源_DaCiDian是一个开源的中文普通话词汇,用于自动语音识别(ASR)....
- win7回收站右键没有清空回收站选项
- 第十部分 项目风险管理
- p5727深基5.例3冰雹猜想c语言,深基
- 天数智芯亮相2019世界人工智能大会 软硬协同深耕AI极致算力
- html5 可拖动悬浮按钮,前端vue开发:可移动的悬浮按钮的应用
- 加密艺术,当AI遇上区块链 |Mixlab跨学科
- 深度学习中端到端(end-to-end)简要理解
- DBA呢?我的数据库又双叒叕连不上了!
热门文章
- VPS融合怪测评脚本(主体已完善,历史遗留问题解决时间未知)(VPS fusion monster evaluation script)
- 推荐几款实用的思维导图工具
- 轻量应用服务器 饥荒,饥荒服务端世界设置生成
- golang开发环境之Sublime Text 2+GoSublime+gocode+MarGo
- httpclient的两个重要的参数maxPerRoute及MaxTotal
- 随机的UserAgent对付某反爬虫网站
- VR/AR的需求和前景
- Prometheus(二)基础概念
- 基于ug的框架断路器抽屉座运动仿真
- 1.4 Kronecker积