scrollView实现基础中心点缩放及与UIPageControl结合使用
一般来说scrollView与UIPageControl都是结合使用,因为在使用滚动视图的时候 ,使用UIPageControl,用户可以 清楚 的明白显示的内容有多少页,如果 没有的话,总不能让用户一个个的去数。用户体验效果不理想。
一般来说,在滑动scrollView的时候,UIPageControl的选中点的位置也会有相应的变化。当然,反之来说,改变选中点的位置,相应的scrollView显示的内容也会产生变化 。
因为我这边需要实现的效果是:最后一张向后滑动之后,会自动跳到第一张显示的内容。如果想解决这个,只需要在第一张之前添加一个最后一张的图片。具体代码就不展示了。关于改变scrollView,来改变UIPageControl当前的值。
具体的代码实现。
//在滚动视图停止滚动时,改变pageControl上面点的位置
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
//获取滚动视图当前的偏移量
CGPoint offset = scrollView.contentOffset;
//计算偏移量与屏幕宽度的关系,也就是偏移了多少倍
NSInteger page = offset.x / kWidth;
self.pageControl.currentPage = page - 1 < 0 ? 9 : page - 1;
}
那如果改变UIPageControl当前的值,来达到改变scrollView的内容呢。通过对所添加的UIPageControll来设置触发方法为click
具体代码展示。
//通过点圆点的位置来改变视图的变化
- (void)click:(UIPageControl *)pageControl{
self.scrollView.contentOffset = CGPointMake(kWidth * (pageControl.currentPage + 1), 0);
}
而对于scrollView来说,如果只设置了一个scrollView的话,我们所达到的效果是不理想的,因为在缩放的同时,也会改变本身的contentSize,所以所达到的效果是不会理想的,也会有很严重的恶劣感。当然,想解决这个,也非常的容易 ,只需要在scrollView上添加一个子视图,一个等大的scrollView,就称呼为小scrollView,小scrollView用来进行缩放处理,而大scrollView来进行滚动。这样一来 ,就不会改变大scrollView整体的contentSize.
小scrollView缩放的具体代码展示。
//必须设置缩放比例以及设置代理对象
smallScroll.delegate = self;
smallScroll.minimumZoomScale = 0.5;
smallScroll.maximumZoomScale = 2.0;
//指定缩放的视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
//return [scrollView.subviews firstObject];
return [scrollView.subviews objectAtIndex:0];
} //中心点缩放
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
UIImageView *imageV = [scrollView.subviews firstObject];
if (scrollView.zoomScale <= 1.0) {
imageV.center = CGPointMake(kWidth / 2, kHeight / 2);
}
}
因为是对小scrollView进行缩放,所以 在进行缩放前,必须要指定进行缩放的视图是哪一个。 所以 大srcollView的第一个子视图就是我想要进行缩放的视图。
当然,到了这个地步 ,又发现了一个新的问题,滑动到下一页后,再返回刚刚缩放过的地方,发现还是改变后的图片,并没有恢复成原样。发现问题就应该合理的解决好问题。
//减速结束,也就是停止滚动
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"结束滚动");
// 先从负责滚动的⼤scrollView找到他的⼦子视图
for (UIScrollView *sView in scrollView.subviews){
// 在根据⼦子类的对象类型进⾏行判断
if ([sView isKindOfClass:[UIScrollView class]]){
// 把视图的尺⼨寸恢复到原有尺⼨寸
sView.zoomScale = 1.0;
}
}
}
当然,使用这些方法的前提就是设置好代理.Delegate。
做到这个地方,基础的都做完了。不管怎么说。合理的利用方法。发现问题并解决好问题,才是一个新手应该注意的地方。一个方法的使用,并不是单纯的只有一个使用方法,多种思路就可能会有不同的解决方式 。scrollView是滚动视图,使用还是比较简单,日常使用还是挺频繁的,而基于scrollView的UITableView才是日后使用的重点。api文档是可以很好的帮助解决了个个方法的介绍。虽然全英文,可能会看不懂。当不看,你永远不懂,所以要慢慢的,尝试了解一点。会一点是一点。
scrollView实现基础中心点缩放及与UIPageControl结合使用的更多相关文章
- iOS scrollview循环播放加缩放
前些日子一直在研究3d的框架没有时间写博客,不过最后需求改了,也没研究出个啥.这段时间出了新的需求,需要循环播放图片,并且滑动的时候中间的图片有缩放的效果.刚开始想在网上搜索,不过并没有找到合适的de ...
- [ios]scrollView实现移动与缩放
实现滑动 1.在viewDidLoad中对scrollview的contentSize属性赋值 告诉他滑动范围. 实现缩放 1.在storyboard的scrollview的attribute标签中设 ...
- 图像处理之基础---图像缩放中的双线性插值c实现
在进入频域变换之前, 我们还是轻松一下,再搞点平面上的变化来看看.这把选了一个双线性插值(Bilinear interpolation)来实现是源于看到了csdn上别人的问题, 权且实现一个函数,方便 ...
- iOS开发基础-UIScrollView实现图片缩放
当用户在 UIScrollView 上使用捏合手势时, UIScrollView 会给 UIScrollViewDelegate 协议发送一条消息,并调用代理的 viewForZoomingInScr ...
- iOS开发-ScrollView图片缩放
智能手机一般常用常用的操作触摸,滑动,缩放,感觉对于生活而言就是手机在手,天下我有,看网页的时候字体太小,缩放一下,看美女的看的不爽,缩放一下,地图看的不清,缩放一下.缩放是一个很常见的操作,不论是从 ...
- Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- ios9基础知识(UI)总结
UIWindow.UILabel.UIColor.UIScreen.UIViewController.UIView.UIControl.UIButton.IBOutlet.IBAction.UISte ...
- iOS开发——UI基础-UIScrollView
一.UIScrollView使用的步骤 1.创建UIScrollView 2.将需要展示的内容添加到UIScrollView中 3.设置UIScrollView的滚动范围 (contentSize) ...
- canvas API ,通俗的canvas基础知识(四)
今天要讲的内容是canvas的转换功能,前面的内容没用看的同学可以出门右转,先看看前面的基础知识,废话不多说,开始进入正题吧! 何为转换功能?熟悉css3的同学都知道,css3里面有transform ...
随机推荐
- H5实现俄罗斯方块(三)
最高分的面板: (function (window) { 'use strict'; function HighScore() { this.canvas = new Canvas('highscor ...
- readfile() 函数
定义和用法 readfile() 函数输出一个文件. 该函数读入一个文件并写入到输出缓冲. 若成功,则返回从文件中读入的字节数.若失败,则返回 false.您可以通过 @readfile() 形式调用 ...
- IOS网络开发(三)
1 飞机航班查询软件 1.1 问题 NSURLConnection是IOS提供的用于处理Http协议的网络请求的类,可以实现同步请求也可以实现异步请求,本案例使用NSURLConnection类实现一 ...
- 线程和NSThread 、 NSOperation
1 使用NSThread实现打地鼠 1.1 问题 NSThread是ios提供的轻量级的多线程解决方案,但是需要自己管理线程的生命周期.线程同步等.本案例使用NSThread实现一个打地鼠的小游戏,在 ...
- Linux平台屏幕录像工具RecordMyDesktop
如果你把Linux桌面效果自定义得很漂亮,是不是很想录下来和其他人一起分享呢?RecordMyDesktop完全满足需要,我期待这么一个软件很久了,以前也一直没有找到合适的. 以后每次发Ubuntu的 ...
- 基于redis的排行榜设计和实现
前言: 最近想实现一个网页闯关游戏的排行榜设计, 相对而言需求比较简单. 秉承前厂长的训导: “做一件事之前, 先看看别人是怎么做的”. 于是乎网上搜索并参考了不少排行榜的实现机制, 很多人都推荐了r ...
- CentOS 6.6 中中文输入法设置
排版比较乱你,参见 https://www.zybuluo.com/Jpz/note/144597 Linux开发环境配置 安装完系统之后,我们需要设置中文输入法,中文输入法是系统自带的,设置步骤如下 ...
- 5X + 2Y +Z = 50 的所有非负整数解
这种题的解题方法都差不多,不停的循环,不过如果做一下细分,效率应该可以提升很多,下面把最常规效率也最低的代码贴上,有时间再优化 #include <iostream> using name ...
- Sqlserver推荐参数配置及日志收缩问题
最近不定期有项目反馈周期性的系统整体性能下降情况,经分析存在因数据库环境.参数配置不佳造成的.比如,sqlserver日志文件缺省按百分比增长,当日志文件已经比较大时,每次扩展时耗时较长,系统整体卡顿 ...
- Spring JSR-250注解
Java EE5中引入了“Java平台的公共注解(Common Annotations for the Java Platform)”,而且该公共注解从Java SE 6一开始就被包含其中. 2006 ...