UIScrollView的详细讲解

1)初始化

一般的组件初始化都可以allocinit来初始化,上一段代码初始化。

view plain

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文件中要继承UIScrollViewdelegate然后在.m文件的viewDidLoad设置的delegateself。如下:

 

view plain

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]; 

 

 

 

在上面的代码中,一定要设置UIScrollViewpagingEnableYES。不然你就是设置好了其他属性,它还是无法拖动,接下去的分别是设置背景颜色和是否显示水平和竖直拖动条,最后最重要的设置他的ContentSizeContentSize的意思就是它所有内容的大小,这个和它的Frame是不一样的,只有ContentSize的大小大于Frame这样才可以支持拖动。

 

3)结合UIPageControl做新闻翻页效果

初始化UIPageControl的方法都很简单,就是上面讲的allocinit,不过大家要记住的一点就是如果你定义了全局变量一定要在delloc那里释放掉。

 

UIPageControl有一个userInteractionEnabled你可以设置它为NO。就是点击的时候它不调用任何方法。然后设置它的currentPage0,并把它加到view上去。

 

接下来在UIScrollViewdelegate方法:

view plain

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;   

 

 

在这里你可以写上关于UIPageControl的页面设置的算法。如下

 

view plain

int index = fabs(scrollView.contentOffset.x) /scrollView.frame.size.width; 

 

pageControl.currentPage = index; 

 

 

4)其他的

UIScrollView还支持处理缩放的动作,比如图片的缩小或者地图。

但是必须实现它的委托viewForZoomingInScrollView:

scrollViewDidEndZooming:withView:atScale:然后它的两个属性maximumZoomScaleminimumZoomScale要不一样。这样就能基本实现图片的缩放了。



*************************************************************************************

今天就讲下UIScrollView的一些事情,这个可以拖动的组件无论在应用还是游戏开发都会经常用到,所以我们就一定要更加熟悉它了。下面我们开始下手咯。

1)初始化

一般的组件初始化都可以allocinit来初始化


UIScrollView *sv  =[[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0,self.view.frame.size.width, 400)]; 

 

 

2)属性

UIScrollView的最大属性就是可以滚动,那种效果很好看,其实滚动的效果主要的原理是修改他的坐标,准确的讲是修改原点坐标,而UIScrollView跟其他组件的都一样,有自己的delegate,在.h文件中要继承UIScrollViewdelegate然后在.m文件的viewDidLoad设置的delegateself。如下:

sv.delegate = self; 

 

 

ContentSizeContentSizescrollView可以滚动的区域,这个和它的Frame是不一样的,只有ContentSize的大小大于Frame这样才可以支持拖动,比如frame = (0, 0, 320, 480) contentSize = (320, 960),代表你的scrollview可以上下滚动,滚动区域为frame大小的两倍。


contentOffsetscrollView当前显示区域顶点相对于frame顶点的偏移量,比如上个例子你拉到最下面,contentoffset就是(0480),也就是y偏移了480


contentInsetscrollViewcontentview的顶点相对于scrollView的位置,例如你的contentInset = 0100),那么你的contentview就是从scrollview的(0100)开始显示

另外UITableViewUIScrollView的子类,它们在上述属性又有所不同,tableviewcontentsize是由它的下列方法共同实现的


例如你在delegate方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 100;

}

那么你的tabelviewcontentsize就是(320, 4400)

bounces

默认是yes,就是滚动超过边界,会有反弹回来的效果,假如是NO,那么滚动到达边界,会连忙停止


bouncesZoom

bounces类似,区别在于,这个效果反映在缩放上面,假如缩放超过最大缩放

,那么会反弹,假如是NO,则到达最大或者最小的时候,立即停止。


directionLockEnabled

默认是NO,可以在垂直和水平方向同时运动,当值是YES,假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动,假如一开始是对角方向滚动,则不会禁止某个方向


indicatorStyle

滚动条的样式,基本只是设置颜色,总共3个颜色,默认,黑色,白色的


scrollIndicatorInsets

设置滚动条的位置

 

3)结合UIPageControl做新闻翻页效果

初始化UIPageControl的方法都很简单,就是上面讲的allocinit,不过大家要记住的一点就是如果你定义了全局变量一定要在delloc那里释放掉。

 

UIPageControl有一个userInteractionEnabled你可以设置它为NO。就是点击的时候它不调用任何方法。然后设置它的currentPage0,并把它加到view上去。

 

接下来在UIScrollViewdelegate方法:


- (void)scrollViewDidScroll:(UIScrollView *)scrollView;   

 

 

在这里你可以写上关于UIPageControl的页面设置的算法。如下

 

int index = fabs(scrollView.contentOffset.x) /scrollView.frame.size.width; 

 

pageControl.currentPage = index; 

 

 

4)代理方法

#pragma mark UIScrollViewDelegate

//只要滚动了就会触发

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;   

{

   NSLog(@"ContentOffset  x is  %f,yis %f",scrollView.contentOffset.x,scrollView.contentOffset.y);

}

//开始拖拽视图

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;   

{

   NSLog(@"scrollViewWillBeginDragging");

}

//完成拖拽

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; 

{

   NSLog(@"scrollViewDidEndDragging");

}

//将开始降速时

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;   

{

   NSLog(@"scrollViewWillBeginDecelerating");

}


//减速停止了时执行,手触摸时执行

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;   

{

   NSLog(@"scrollViewDidEndDecelerating");

}

//滚动动画停止时执行,也就是setContentOffset改变时

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;

{

   NSLog(@"scrollViewDidEndScrollingAnimation");

}

//设置放大缩小的视图,要是uiscrollviewsubview

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;   

{

   NSLog(@"viewForZoomingInScrollView");

   returnviewA;

}


//完成放大缩小时调用

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale; 

{

   viewA.frame=CGRectMake(50,0,100,400);

   NSLog(@"scale between minimum and maximum. called after any 'bounce' animations");

}// scale between minimum and maximum. called after any 'bounce' animations


//如果你不是完全滚动到滚轴视图的顶部,你可以轻点状态栏,那个可视的滚轴视图会一直滚动到顶部,那是默认行为,你可以通过该方法返回NO来关闭它

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;   

{

    NSLog(@"scrollViewShouldScrollToTop");

   returnYES;

}


- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;     

{

    NSLog(@"scrollViewDidScrollToTop");

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值