前言

对于图片拉伸是移动开发中很常见的需求,最近工作中就遇到了利用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小时内与您取得联系。