UIScrollView的详细讲解
来源:互联网 发布:葫芦岛广电网络 编辑:程序博客网 时间:2024/06/05 11:27
今天就讲下UIScrollView的一些事情,这个可以拖动的组件无论在应用还是游戏开发都会经常用到,所以我们就一定要更加熟悉它了。下面我们开始下手咯。
(1)初始化
一般的组件初始化都可以alloc和init来初始化,上一段代码初始化。
UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, 400)];
一般的初始化也都有很多方法,都可以确定组件的Frame,或者一些属性,比如UIButton的初始化可以确定Button的类型。当然,我比较提倡大家用代码来写,这样比较了解整个代码执行的流程,而不是利用IB来弄布局,确实很多人都用IB来布局会省很多时间,但这个因人而异,我比较提倡纯代码写。
(2)滚动属性
UIScrollView的最大属性就是可以滚动,那种效果很好看,其实滚动的效果主要的原理是修改他的坐标,准确的讲是修改原点坐标,而UIScrollView跟其他组件的都一样,有自己的delegate,在.h文件中要继承UIScrollView的delegate然后在.m文件的viewDidLoad设置的delegate为self。如下:
sv.pagingEnabled = YES; sv.backgroundColor = [UIColor blueColor]; sv.showsVerticalScrollIndicator = NO; sv.showsHorizontalScrollIndicator = NO;sv.delegate = self; CGSize newSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height); [sv setContentSize:newSize]; [self.view addSubview: sv];
在上面的代码中,一定要设置UIScrollView的pagingEnable为YES。不然你就是设置好了其他属性,它还是无法拖动,接下去的分别是设置背景颜色和是否显示水平和竖直拖动条,最后最重要的设置他的ContentSize,ContentSize的意思就是它所有内容的大小,这个和它的Frame是不一样的,只有ContentSize的大小大于ContentSize这样才可以支持拖动。
(3)结合UIPageControl做新闻翻页效果
初始化UIPageControl的方法都很简单,就是上面讲的alloc和init,不过大家要记住的一点就是如果你定义了全局变量一定要在delloc那里释放掉。
UIPageControl有一个userInteractionEnabled你可以设置它为NO。就是点击的时候它不调用任何方法。然后设置它的currentPage 为0,并把它加到view上去。
接下来在UIScrollView的delegate方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
在这里你可以写上关于UIPageControl的页面设置的算法。如下
int index = fabs(scrollView.contentOffset.x) / scrollView.frame.size.width;pageControl.currentPage = index;
(4)其他的
UIScrollView还支持处理缩放的动作,比如图片的缩小或者地图。
但是必须实现它的委托viewForZoomingInScrollView:
scrollViewDidEndZooming:withView:atScale:然后它的两个属性maximumZoomScale和minimumZoomScale 要不一样。这样就能基本实现图片的缩放了。
好了,今天讲UIScrollView和UIPageControl就到这里咯,希望大家都能理解。欢迎拍砖。
附加一个photo的利用UIScrollView实现的demo给大家:http://files.cnblogs.com/huangdongcheng/PagePhotosDemo.zip
delegate设置协议BOOL directionalLockEnabled指定控件是否只能在一个方向上滚动BOOL bounces控制控件遇到边框是否反弹BOOL alwaysBounceVertical控制垂直方向遇到边框是否反弹BOOL alwaysBounceHorizontal控制水平方向遇到边框是否反弹BOOL pagingEnabled控制控件是否整页翻动BOOL scrollEnabled控制控件是否能滚动BOOL showsHorizontalScrollIndicator控制是否显示水平方向的滚动条BOOL
showsVerticalScrollIndicator控制是否显示垂直方向的滚动条UIEdgeInsets scrollIndicatorInsets指定滚动条在scrollerView中的位置UIScrollViewIndicatorStyle
indicatorStyle设定滚动条的样式float decelerationRate改变scrollerView的减速点位置BOOL tracking监控当前目标是否正在被跟踪BOOL dragging监控当前目标是否正在被拖拽BOOL decelerating监控当前目标是否正在减速BOOL delaysContentTouches控制视图是否延时调用开始滚动的方法BOOL canCancelContentTouches控制控件是否接触取消touch的事件float minimumZoomScale缩小的最小比例float maximumZoomScale放大的最大比例float zoomScale设置变化比例BOOL bouncesZoom控制缩放的时候是否会反弹BOOL zooming判断控件的大小是否正在改变BOOL zoomBouncing判断是否正在进行缩放反弹BOOL scrollsToTop控制控件滚动到顶部
这里把UIScrollView的几个要点总结下:
从你的手指touch屏幕开始,scrollView开始一个timer,如果:
1. 150ms内如果你的手指没有任何动作,消息就会传给subView。
2. 150ms内手指有明显的滑动(一个swipe动作),scrollView就会滚动,消息不会传给subView,这里就是产生问题二的原因。
3. 150ms内手指没有滑动,scrollView将消息传给subView,但是之后手指开始滑动,scrollView传送touchesCancelled消息给subView,然后开始滚动。
观察下tableView的情况,你先按住一个cell,cell开始高亮,手不要放开,开始滑动,tableView开始滚动,高亮取消。
delaysContentTouches的作用:
这个标志默认是YES,使用上面的150ms的timer,如果设置为NO,touch事件立即传递给subView,不会有150ms的等待。
cancelsTouches的作用:
这个标准默认为YES,如果设置为NO,这消息一旦传递给subView,这scroll事件不会再发生。
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解
- UIScrollView的详细讲解(转)
- Iphone应用开发之五: UIScrollView的详细讲解
- 【iphone应用开发】Iphone应用开发之五: UIScrollView的详细讲解
- UIScrollView, UIPageControl 的详细使用
- prototype的详细讲解
- AJAX的详细讲解
- static的详细讲解
- UIImageView的详细讲解
- UITableView的详细讲解
- digester的详细讲解
- google play电子市场和gmail如何安装在国产手机、三星手机、摩托手机里
- 使用LoadRunner监控MySQL的方法介绍
- (转)mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- 只学用得着的东西!
- 1/7 第一篇 变量的内存实质
- UIScrollView的详细讲解
- 学会用大脑学习
- Linux 内存 buffer 和 cache 的区别
- 如果不使用 SQL Mail,如何在 SQL Server 中发送电子邮件
- Android 开发笔记
- ASP.NET 应用程序生命周期
- 千万别惹程序员
- Android onKeyDown监听返回键无效
- 单例设计模式