IOS ScrollView放大缩小点击位置并居中
项目中的一个优化案例,提升用户体验,对地铁线路图点击放大、缩小,并且点击位置居中;
正常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放大缩小点击位置并居中的更多相关文章
- IOS UIView 放大缩小
/创建缩小了的视图myWeiBoImageVC = [[UIViewController alloc] init];myWeiBoImageVC.view.clipsToBounds = YES;my ...
- 猫猫学IOS(二)UI之button操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,猫猫分享.必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u013 ...
- AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,AJ分享,必须精品 这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片. 点击变换 其实用到了按钮的两个状态,再State C ...
- [jQuery]地图浏览:如何实现图片的放大缩小和点击之后的位置居中
HTML代码: <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis. ...
- 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
前几天看到了有人在android5.0上实现了如下图一样的效果,我自己就去搜了下.参考了国外一篇文章和国内的一篇文章,最终实现了想要的效果.具体参考的网址我已经贴到文章末尾,大家可以去英文的那个网站看 ...
- Android 实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
前几天看到了有人在android5.0上实现了如下图一样的效果,我自己就去搜了下.参考了国外一篇文章和国内的一篇文章,最终实现了想要的效果.具体参考的网址我已经贴到文章末尾,大家可以去英文的那个网站看 ...
- 解决mxGraph放大/缩小在非IE浏览器下overlay图标位置不变化的问题
首先要创建一个工具栏.并为工具栏中的放大.缩小button定义事件. <div id="toolbar" style="float:left;margin-top: ...
- scrollview里面多张图片,每张都能放大缩小
http://blog.sina.com.cn/s/blog_5d68044001018s1n.html scrollview里面多张图片,每张都能放大缩小 - (void)viewDidLoad{ ...
- wxParse解析富文本内容使点击图片可以选中并实现放大缩小
wxParse解析富文本内容不多说,之前写过步骤介绍,主要是在使用过程中发现解析的富文本内容里有图片时有的可以点击放大缩小,有的点击却报错,找不到imgUrls. 经过排查发现:循环解析的富文本内容正 ...
随机推荐
- oracle远程连接配置
今日需要对站内所有的空间数据做入库处理,所以在服务器上安装了oracle,在本地需要对其进行连接,在网上查阅了相关资料,整理如下: 远程服务端配置:1. 数据库配置 因为要为外界客户端提供数据服 ...
- awk(1)-简述
1.概述 AWK is a programming language designed for text processing and typically used as a data extract ...
- php + sqlserver
Dbconn <?php class DbConn{ private $conn; private $rs; private function __construct(){ $serverNam ...
- ASCII电脑编码
Bin Dec Hex 缩写/字符 解释 0000 0000 0 00 NUL(null) 空字符 0000 0001 1 01 SOH(start of headline) 标题开始 0000 00 ...
- OAuth2.0授权
一.什么是OAuth2.0官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secu ...
- Advanced SystemCare 系统优化软件
这是一款国外非常流行的系统优化软件,功能很全面,而且中文版用起来也没有语言障碍. Pro版: C0184-8F31F-4B337-296F7 8DE4A-352D9-B4531-D60F7 5B91B ...
- HDU-2296 Ring(AC自动机+DP)
题目大意:给出的m个字符串都有一个权值.用小写字母构造一个长度不超过n的字符串S,如果S包含子串s,则S获取s的权值.输出具有最大权值的最小字符串S. 题目分析:先建立AC自动机.定义状态dp(ste ...
- python基础篇
python脚本开头 #!/usr/bin/env python# -*- coding: utf-8 -*print "你好,世界" 不要问为什么,记住就好了 变量定于的规则 变 ...
- etcd第一集
网站:https://github.com/coreos/etcd 一些观点:https://yq.aliyun.com/articles/11035 1.etcd是键值存储仓库,配置共享和服务发现2 ...
- OpenRefine 数据清洗工具
OpenRefine(官方网站:http://openrefine.org/).它能自动对数据内容进行修正与整理.OpenRefine可以实现数据排序.自动查找重复条目并完成数据记录.OpenRefi ...