项目中的一个优化案例,提升用户体验,对地铁线路图点击放大、缩小,并且点击位置居中;

正常ScrollView 我们点击某一点比如屏幕右侧,想要点的位置向左移动到中心位置,很简单只有算出该点位置距中心位置的距离:point.x - contentOffset.x -SCREEN_WIDTH*0.5,然后问设置contentOffset.x+相应的距离即可。上下也同理.

但是这里要处理的双击 放大的同时,也要实现上面的效果。经过单步调试,查看

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 代理方法的log:

NSLog(@"%f--%f -%f",scrollView.contentOffset.x,scrollView.contentOffset.y,scrollView.zoomScale);

发现移动移动图上的某一点到达屏幕的边界contentOffset.x变化与缩放倍数成正比!!!正比!!!

在根据简单版的居中原理的方法,应用到缩放后的ScrollView中,所有相关参数都*相应的缩放倍数!!正比关系记得。

下面是具体实现代码 :(PS 有更好更简单实现方法欢迎提供交流,本文描述有不当处欢迎指正谢谢!!)

- (void)showPointToCenterWithPoint:(CGPoint)pt withZoomScale:(CGFloat)zs{
[UIView animateWithDuration:0.3 animations:^{ __block CGPoint point = pt;
_baseScrollView.zoomScale = zs;
CGFloat offsetX = _baseScrollView.contentOffset.x*zs;
CGFloat offsetY = _baseScrollView.contentOffset.y*zs;
CGFloat contentW = _baseScrollView.contentSize.width;
CGFloat contentH = _baseScrollView.contentSize.height;
CGFloat x = ;
CGFloat y = ;
point = CGPointMake(point.x*zs, point.y*zs);
//右侧
if (offsetX + SCREEN_WIDTH < contentW && (point.x - offsetX) > SCREEN_WIDTH*0.5) {
//居中所要移动的距离:(point.x - offsetX)-SCREEN_WIDTH*0.5) ;移动后 还没有超过边界即满足居中
if ((offsetX + (point.x - offsetX)-SCREEN_WIDTH*0.5) + SCREEN_WIDTH < contentW) {
x = offsetX + (point.x - offsetX)- SCREEN_WIDTH*0.5;
}else{
//不满足居中
x = offsetX + (contentW - offsetX - SCREEN_WIDTH);
}
}else{
//左侧 满足居中
if (offsetX - (SCREEN_WIDTH*0.5 - (point.x - offsetX))>=) {
x = offsetX - (SCREEN_WIDTH*0.5 - (point.x - offsetX)); }else{
x = ;
}
} //下侧
if (offsetY + SCREEN_HEIGHT < contentH && (point.y - offsetY) > SCREEN_HEIGHT*0.5) { if ((offsetY + (point.y - offsetY)-SCREEN_HEIGHT*0.5) + SCREEN_HEIGHT < contentH) { y = offsetY + (point.y - offsetY)- SCREEN_HEIGHT*0.5;
}else{ y = offsetY + (contentH - offsetY - SCREEN_HEIGHT);
}
}else{
if (offsetY - (SCREEN_HEIGHT*0.5 - (point.y - offsetY)) >= ) {
y = offsetY - (SCREEN_HEIGHT*0.5 - (point.y - offsetY)); }else{
y = ;
}
} [_baseScrollView setContentOffset:CGPointMake(x, y)animated:NO]; } completion:^(BOOL finished) { }];
}

IOS ScrollView放大缩小点击位置并居中的更多相关文章

  1. IOS UIView 放大缩小

    /创建缩小了的视图myWeiBoImageVC = [[UIViewController alloc] init];myWeiBoImageVC.view.clipsToBounds = YES;my ...

  2. 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转

    不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...

  3. AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转

    不多说,先上图片看效果,AJ分享,必须精品 这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片. 点击变换 其实用到了按钮的两个状态,再State C ...

  4. [jQuery]地图浏览:如何实现图片的放大缩小和点击之后的位置居中

    HTML代码: <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis. ...

  5. 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置

    前几天看到了有人在android5.0上实现了如下图一样的效果,我自己就去搜了下.参考了国外一篇文章和国内的一篇文章,最终实现了想要的效果.具体参考的网址我已经贴到文章末尾,大家可以去英文的那个网站看 ...

  6. Android 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置

    前几天看到了有人在android5.0上实现了如下图一样的效果,我自己就去搜了下.参考了国外一篇文章和国内的一篇文章,最终实现了想要的效果.具体参考的网址我已经贴到文章末尾,大家可以去英文的那个网站看 ...

  7. 解决mxGraph放大/缩小在非IE浏览器下overlay图标位置不变化的问题

    首先要创建一个工具栏.并为工具栏中的放大.缩小button定义事件. <div id="toolbar" style="float:left;margin-top: ...

  8. scrollview里面多张图片,每张都能放大缩小

    http://blog.sina.com.cn/s/blog_5d68044001018s1n.html scrollview里面多张图片,每张都能放大缩小 - (void)viewDidLoad{  ...

  9. wxParse解析富文本内容使点击图片可以选中并实现放大缩小

    wxParse解析富文本内容不多说,之前写过步骤介绍,主要是在使用过程中发现解析的富文本内容里有图片时有的可以点击放大缩小,有的点击却报错,找不到imgUrls. 经过排查发现:循环解析的富文本内容正 ...

随机推荐

  1. (转) Xcode 7 Bitcode

    Xcode 7 Bitcode的工作流程及安全性评估 2015-12-18 06:13 编辑: suiling 分类:iOS开发 来源:FreeBuf黑客与极客 简介 随着 Xcode 7 的发布,苹 ...

  2. [转]Jenkins使用 管理节点

    现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...

  3. 获得触发hover事件的元素id

    例: <div class="menu"> <ul> <li> <a id="menu1"></a> ...

  4. Swift-----类型转换 、 嵌套类型 、 扩展 、 协议 、 访问控制

    使用is和as操作符判断和转换数组中的对象类型 1.1 问题 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例.在Swift中使用is和as操作符实现类型转换. 本案例定义一个媒体类 ...

  5. C++ 中queue(队列)的用法

    #include <iostream>#include <queue>#include <assert.h>/*调用的时候要有头文件: #include<st ...

  6. 0823--静默安装、fiddler设置断点、f12清除数据记录

    刚写了半天,然后没保存,哎,墙角抹泪. Anyway,记一下最近工作中遇到的问题吧. 1. 静默安装 cmd命令:拖入exe 文件,空格后输入--silent-install 若要在安装时修改主页,则 ...

  7. php中关于Map热点的运用

    给图像使用map标签,可以给图像的某个部分建立超连接 一般情况下用在图片上,如:<img src="Images/banner.gif" width="780&qu ...

  8. Spark RDD API详解(一) Map和Reduce

    RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RDD可以简单看成是一个数组.和普通数组的区别是,RDD中的数据是分区存储的,这样不同 ...

  9. hdu1024 dp

    题意:求一个序列中的最大 m 段和,m 段不能交叉. dp[i][0/1][j] 表示已经取完第 i 个物品,第 i 个物品取或不取,取到第 j 个子段. 用vis[i][0/1][j] 表示该 dp ...

  10. PHP 类中的魔术方法

    定义: PHP类中以两个下画线“__”开头的方法被称为魔术方法. 分类: 例如:构造方法:__construct:析构方法:__destruct:动态重载:__set().__get().__call ...