直接先说原理吧--原理:利用了scrollview的回调函数(如下)以及scrollview自己内部的一些缩放规则(其实我也还没弄清楚具体scrollview干了什么事),只是知道了它可以怎么做-_-#

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
returnself.zoomImageView;
}

其实今天的缩放部分我还加上了常见的  双击图片的缩小与放大,先上代码:

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//自身属性的一些设置
NSLog(@"%@",NSStringFromCGRect(frame));
self.delegate =self;
self.showsVerticalScrollIndicator =NO;
self.showsHorizontalScrollIndicator =NO;
self.maximumZoomScale =; //承载当前图片的imageview
self.zoomImageView = [[[UIImageViewalloc] init] autorelease];
self.zoomImageView.userInteractionEnabled =YES;
self.zoomImageView.frame =CGRectMake(0.0f, 0.0f, frame.size.width , frame.size.height);
self.zoomImageView.image = [UIImageimageNamed:@"lichengwu.jpeg"];
[self addSubview:self.zoomImageView]; // Add gesture,double tap zoom imageView.
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizeralloc] initWithTarget:self
action:@selector(handleDoubleTap:)];
[doubleTapGesture setNumberOfTapsRequired:];
[ self.zoomImageViewaddGestureRecognizer:doubleTapGesture];
[doubleTapGesture release]; // initialize tapclicks
tapClicks = NO;
}
return self;
}
#pragma mark - Zoom methods

- (void)handleDoubleTap:(UIGestureRecognizer *)gesture
{ float newScale;
if (!tapClicks) {
newScale = self.zoomScale *2.0;
}
else{
newScale = self.zoomScale *0.0;
}
CGRect zoomRect = [selfzoomRectForScale:newScale withCenter:[gesturelocationInView:gesture.view]];
[self zoomToRect:zoomRectanimated:YES];
tapClicks = !tapClicks;
}

这一部分也是相当的一目了然,就是处理双击事件函数,是缩小还是放大,正正的处理图片的函数如下:

#pragma mark - CommonMethods
- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center
{
CGRect zoomRect;
zoomRect.size.height =self.frame.size.height / scale;
zoomRect.size.width =self.frame.size.width / scale;
zoomRect.origin.x = center.x - (zoomRect.size.width /2.0);
zoomRect.origin.y = center.y - (zoomRect.size.height /2.0);
return zoomRect;
}

看见原理了没,其实就是获得当前点击处的中心X与原来图片尺寸的差值,然后传递给Scrollview进行缩放,至于scrollview具体干了什么事情,这就要让喜欢刨根问底的童鞋用一些力气了,然后@给我哦。

最新文章

  1. iOS 获取emoji表情和拦截emoji表情
  2. TCP 介绍
  3. custom struts framework
  4. Javascript学习-闭包
  5. IRP_MJ_CREATE
  6. JS基础DOM篇之一:何为DOM?
  7. Hibernate注解错误之- org.hibernate.MappingException: Could not determine type for:
  8. cocos2d-x Android 环境搭建问题汇总
  9. ASP.NET-FineUI开发实践-5
  10. 创建git repo
  11. poj3468 线段树+lazy标记
  12. 双系统删除Ubuntu后出现grub界面而无法正常启动Windows系统的解决方法
  13. mysql主从复制安装详解
  14. python地理数据处理库geopy
  15. [jzoj]4216.【NOIP2015模拟9.12】平方和
  16. java上传文件常见几种方式
  17. 使用Log4j2实现日志输出
  18. 工具运行过程中,CPU占用过高的分析定位
  19. 附3 springboot源码解析 - 构建SpringApplication
  20. Fiddler SessionFlags

热门文章

  1. 二分图最大匹配(匈牙利算法) UVA 670 The dog task
  2. [译]libcurl错误码
  3. Windows下重置MySQL密码【MYSQL】
  4. 一个用pyton写的监控服务端进程的软件hcm
  5. Angular——MVC模式开发实战
  6. 呼啦圈(keyframes和transform结合)
  7. MySQL 8.*版本 修改root密码
  8. Codeforces_766_D_(并查集)
  9. Jmeter之JDBC请求参数化(一)
  10. 00JavaScript