全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用iOS手势与scrollView代理实现图片的放大缩小

前言

对于图片拉伸是移动开发中很常见的需求,最近工作中就遇到了利用iOS实现对图片的放大和缩小效果,通过查找资料找到了两种解决方法,分别是用捏合手势和用scrollView的代理方法来实现,下面话不多说,来看看详细的方法介绍吧。

第一种方法:用捏合手势放大缩小


@interface ViewController ()

@property (strong, nonatomic) IBOutlet UIView *redView;
@property (assign, nonatomic) CGFloat scale;//记录上次手势结束的放大倍数
@property (assign, nonatomic) CGFloat realScale;//当前手势应该放大的倍数

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchEvent:)];

 [self.view addGestureRecognizer:pinchGesture];

 self.scale = 1;
}
- (void)pinchEvent:(UIPinchGestureRecognizer *)pinch {

 self.realScale = self.scale + (pinch.scale - 1);//当前的放大倍数是上次的放大倍数加上当前手势pinch程度

 if (self.realScale > 10) {//设置最大放大倍数
 self.realScale = 10;
 }else if (self.realScale < 0.5){//最小放大倍数
 self.realScale = 0.5;
 }

 self.redView.transform = CGAffineTransformMakeScale(self.realScale, self.realScale);

 if (pinch.state == UIGestureRecognizerStateEnded){//当结束捏合手势时记录当前图片放大倍数

 self.scale = self.realScale;

 }

 NSLog(@"%f-------%f",self.scale,self.realScale);
}

@end

这种方式有个弊端:如果不进一步设置,放大的焦点只能是从中心开始,而且放大的部分超出屏幕不能滚动查看。
如果想用单击双击手势放大缩小用点击手势UITapGestureRecognizer就可以了,单击设置属性numberOfTapsRequired为1,双击设置为2,就可以了,实现他的点击方法就可以了。

第二种方法:用scrollView的代理方法实现

设置放大倍数和代理

 self.scrollView.minimumZoomScale = 0.5;
 self.scrollView.maximumZoomScale = 10;

 self.scrollView.delegate = self;

代理方法返回你要放大的图片

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

 return self.enlargeImage;
}

在这个代理方法里面设置滚动范围、调整放大图片的位置(如果不设置,放大后图片按照原来比例frame的X,Y值也会跟随比例变化,图片就跑偏了)

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

 CGRect frame = self.enlargeImage.frame;

 frame.origin.y = (self.scrollView.frame.size.height - self.enlargeImage.frame.size.height) > 0 ? (self.scrollView.frame.size.height - self.enlargeImage.frame.size.height) * 0.5 : 0;
 frame.origin.x = (self.scrollView.frame.size.width - self.enlargeImage.frame.size.width) > 0 ? (self.scrollView.frame.size.width - self.enlargeImage.frame.size.width) * 0.5 : 0;
 self.enlargeImage.frame = frame;

 self.scrollView.contentSize = CGSizeMake(self.enlargeImage.frame.size.width + 30, self.enlargeImage.frame.size.height + 30);
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# ios  # 手势放大缩小图片  # ios放大缩小手势  # scrollview放大缩小  # iOS实现点击图片放大和长按保存图片的示例  # iOS 点击图片放大效果的实现  # 解决iOS11图片下拉放大出现信号栏白条的bug问题  # iOS tableView实现顶部图片拉伸效果  # iOS tableview实现顶部拉伸效果  # iOS TableView头视图根据偏移量下拉缩放效果  # iOS tableView实现头部拉伸并改变导航条渐变色  # iOS应用开发中UITableView的分割线的一些设置技巧  # IOS UITableView和UITableViewCell的几种样式详细介绍  # iOS tableView实现下拉图片放大效果  # 就可以  # 双击  # 种方法  # 单击  # 也会  # 有个  # 在这个  # 你要  # 两种  # 是从  # 来看看  # 这篇文章  # 多说  # 设置为  # 来实现  # 就跑  # 想用  # 解决方法  # 中就  # 不进 


相关文章: 微信推文制作网站有哪些,怎么做微信推文,急?  如何获取免费开源的自助建站系统源码?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  php json中文编码为null的解决办法  怀化网站制作公司,怀化新生儿上户网上办理流程?  建站主机与虚拟主机有何区别?如何选择最优方案?  寿县云建站:智能SEO优化与多行业模板快速上线指南  宝塔建站助手安装配置与建站模板使用全流程解析  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  定制建站哪家更专业可靠?推荐榜单揭晓  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何自定义建站之星网站的导航菜单样式?  建站之星后台管理:高效配置与模板优化提升用户体验  已有域名如何快速搭建专属网站?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  音乐网站服务器如何优化API响应速度?  如何在阿里云虚拟主机上快速搭建个人网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何通过虚拟主机空间快速建站?  如何快速生成ASP一键建站模板并优化安全性?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  网站代码制作软件有哪些,如何生成自己网站的代码?  自助网站制作软件,个人如何自助建网站?  学校建站服务器如何选型才能满足性能需求?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何制作算命网站,怎么注册算命网站?  内网网站制作软件,内网的网站如何发布到外网?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  红河网站制作公司,红河事业单位身份证如何上传?  建站168自助建站系统:快速模板定制与SEO优化指南  如何选择香港主机高效搭建外贸独立站?  如何获取开源自助建站系统免费下载链接?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  宝塔建站后网页无法访问如何解决?  如何选择可靠的免备案建站服务器?  完全自定义免费建站平台:主题模板在线生成一站式服务  建站上传速度慢?如何优化加速网站加载效率?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何快速建站并高效导出源代码?  C++中引用和指针有什么区别?(代码说明)  子杰智能建站系统|零代码开发与AI生成SEO优化指南  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  建站主机是否属于云主机类型?  如何快速搭建FTP站点实现文件共享?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。