iOS开发-ScrollView图片缩放
智能手机一般常用常用的操作触摸,滑动,缩放,感觉对于生活而言就是手机在手,天下我有,看网页的时候字体太小,缩放一下,看美女的看的不爽,缩放一下,地图看的不清,缩放一下。缩放是一个很常见的操作,不论是从生活还是写程序而言,都是一个绕不开的东西,做了一个Demo,缩放一下美女,熟悉ScrollView中的常见属性的设置,开始正题吧。
常见属性
先看图,要实现的效果:
1 2 3 4 5 6 7 | UIImage *image=[UIImage imageNamed:@ "girl0.jpg" ]; _imageView=[[UIImageView alloc] initWithImage:image]; [_scrollView addSubview:_imageView]; //设置ScrollView和image是一样的大小 [_scrollView setContentSize:image.size]; |
可以设置ScrollView的初始位置和大小:
1 2 | //CGRect枚举一个矩形,然后设置imageView的位置 [_imageView setFrame:CGRectMake(0, 0, 100, 100)]; |
设置边界区域:
1 2 | //设置边界区域 [_scrollView setContentInset:UIEdgeInsetsMake(20, 20.0, 20.0, 20.0)]; |
上下左右移动调用哪个同意IBAction,通过Tag区分(之前文章有介绍),移动就是控制坐标,IOS中左上角是0,X轴向右自增,Y轴向下自增:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | UIButton *button=(UIButton *)sender; CGPoint currentPoint= self .scrollView.contentOffset; switch (button.tag) { case 0: currentPoint.y-=50; break ; case 1: currentPoint.y+=50; break ; case 2: currentPoint.x-=50; break ; case 3: currentPoint.x+=50; break ; default : break ; } //横轴的边界值 if (currentPoint.x<0) { currentPoint.x=0; } else if (currentPoint.x>_scrollView.contentSize.width-_scrollView.bounds.size.width){ currentPoint.x=_scrollView.contentSize.width-_scrollView.bounds.size.width; } //纵轴的边界值 if (currentPoint.y<0) { currentPoint.y=0; } else if (currentPoint.y>_scrollView.contentSize.height-_scrollView.bounds.size.height){ currentPoint.y=_scrollView.contentSize.height-_scrollView.bounds.size.height; } //动画效果 [ self .scrollView setContentOffset:currentPoint animated: YES ]; |
动画效果可以通过block设置:
1 2 3 4 | [UIView animateWithDuration:0.3f animations: ^{ [ self .scrollView setContentOffset:currentPoint]; }]; |
缩放
缩放之前需要涉及到一个东西就是控制器需要遵守UIScrollViewDelegate协议,然后实现协议中方法,应用场景中如果我们在对ScrollView中图片进行缩放,将消息通知给UIScrollViewDelegate,最终将事件实现委托给是实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // // ViewController.h // ScrollView // http://www.cnblogs.com/xiaofeixiang // Created by keso on 15/1/20. // Copyright (c) 2015年 keso. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController <UIScrollViewDelegate> @property (weak, nonatomic ) IBOutlet UIScrollView *scrollView; @end |
设置一下最大和最小缩放比例,设置委托:
1 2 3 | [_scrollView setMinimumZoomScale:0.3]; [_scrollView setMaximumZoomScale:1.8]; [_scrollView setDelegate: self ]; |
实现一个返回的图像,如果不是实现,没有效果:
1 2 3 4 | //缩放过程中的图像 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return _imageView; } |
有的时候如果可能有业务需要会需要一个缩放结束的方法:
1 2 3 4 | ////缩放结束 - ( void )scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ NSLog (@ "缩放比例:%f" ,scale); } |
还有一个不常用的,缩放中的方法:
1 2 3 4 | //缩放中 - ( void )scrollViewDidZoom:(UIScrollView *)scrollView{ NSLog (@ "缩放中的调用~" ); } |
最终效果:
作者:FlyElephant
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述