UIScrollView 边界问题处理
来源:互联网 发布:读书笔记本软件 编辑:程序博客网 时间:2024/05/18 23:57
在写引导页 或者 教学页的时候 会有scrollview 上放上多张图片,滑动显示下一张的问题 ,当scrollview到最后一张继续往左滑动的时候右边会有白色部分。
这个就是UIScrollView 边界问题。 scrollview 有一个特别重要的属性 bounces 之前用的少,今天发现这个属性是非常重要的。
(1)当bounces属性设置为YES时,当UIScrollView中图片滑动到边界的时候会出现弹动的效果,就像是Linux中的果冻效果一样。
(2)当bounces属性设置为NO时,当UIScrollView中图片滑动到边界时会直接定在边界就不会有弹动的效果。
我将bounces属性设置为NO,这样就解决了一个bug。就是在滑动到最左端的图片时,再向左滑动就滑动不了,向右滑动也是一样的道理。这样就解决了数组越界所导致的崩溃问题。
#define kNumberOfPages2
#define KDEVICEWIDTH [[UIScreen mainScreen] bounds].size.width
#define KDEVICEHEIGHT [[UIScreen mainScreen] bounds].size.height
#import "ViewController.h"
@interfaceViewController ()<UIScrollViewDelegate>
{
int currentPage;
}
@property (nonatomic,strong)UIScrollView *scrollView;
@property (nonatomic,strong)UIPageControl *pageControl;
@property (nonatomic,strong)UIImageView *backgroundImgV;
@property (nonatomic,strong)UIImageView *backgroundImgV2;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
_scrollView = [[UIScrollViewalloc]initWithFrame:CGRectMake(0,0,KDEVICEWIDTH,KDEVICEHEIGHT)];
_scrollView.pagingEnabled =YES;
_scrollView.clipsToBounds =NO;
_scrollView.contentSize =CGSizeMake(_scrollView.frame.size.width * kNumberOfPages, _scrollView.frame.size.height);
_scrollView.showsHorizontalScrollIndicator =NO;
_scrollView.showsVerticalScrollIndicator =NO;
/**
* 注意这里的属性 bounces为yes的时候 scrollview达到边界的时候还是可以拖动会有白色的弹性空白显示出来设置为no的时候到边界的时候就没有拖动了
*/
_scrollView.bounces =NO;
_scrollView.scrollsToTop =NO;
_scrollView.delegate =self;
[_scrollViewsetContentOffset:CGPointMake(0,0)];
[self.viewaddSubview:_scrollView];
[selfcreateAllEmptyPagesForScrollView:kNumberOfPages];
currentPage =0;
_pageControl.backgroundColor = [UIColorredColor];//无效不允许修改内部
_pageControl = [[UIPageControlalloc]initWithFrame:CGRectMake(KDEVICEWIDTH/2,KDEVICEHEIGHT-20,5,5)];
_pageControl.center =CGPointMake(_scrollView.frame.size.width / 2.0, _scrollView.frame.size.height -15);
_pageControl.numberOfPages =kNumberOfPages;
_pageControl.currentPage =0;
[self.viewaddSubview:_pageControl];
}
-(void)createAllEmptyPagesForScrollView:(int)pages
{
if (pages<0) {
return;
}
for (int i =0; i<pages; i++) {
CGRect sframe =_scrollView.frame;
UIImageView *imgV = [[UIImageViewalloc]initWithFrame:CGRectMake(sframe.size.width * i,0 , KDEVICEWIDTH,KDEVICEHEIGHT)];
NSString *imageName = [NSStringstringWithFormat:@"huanyinye%d",i];
imgV.image = [UIImageimageNamed:imageName];
[_scrollViewaddSubview:imgV];
if (i == pages-1) {
UIButton *btn = [[UIButtonalloc]initWithFrame:CGRectMake((KDEVICEHEIGHT/2 -60)+KDEVICEWIDTH*i,KDEVICEHEIGHT -60,120,40)];
// [btn addTarget:self action:@selector(scale_2) forControlEvents:UIControlEventTouchUpInside];
[_scrollViewaddSubview:btn];
}
}
}
#pragma mark ====== delegate
- (void)scrollViewDidScroll:(UIScrollView *)sender {
CGFloat pageWidth =self.scrollView.frame.size.width;
int page =floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
if (page <0 || page >=kNumberOfPages) {
return;
}
_pageControl.currentPage = page;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
CGFloat pageWidth =self.scrollView.frame.size.width;
int page =floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
_pageControl.currentPage = page;
currentPage = page;
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
- UIScrollView 边界问题处理
- Mina解码边界问题的处理
- 边界问题
- 关于图像处理中的核与卷积、以及卷积边界问题
- mysql使用between and处理时间区间不包括右边界问题
- mysql使用between and处理时间区间不包括右边界问题
- mysql使用between and处理时间区间不包括右边界问题
- UIScrollView 平滑划动处理
- UIScrollView 平滑划动处理
- iOS7UIView边界问题
- 事务边界问题
- 数组边界问题
- 循环滚动UIScrollView(无点击事件处理)
- UIScrollView 中处理subView点击事件
- 循环滚动UIScrollView(有点击事件处理)
- UIScrollView _delegateScrollViewAnimationEnd 引起的崩溃处理
- UIScrollView上的控件处理touch事件
- ios UIScrollview UIImageView点击事件处理
- l2范数
- 【18】JSTL标签库
- linux压缩(解压缩)命令详解
- 装饰模式、装饰器模式、代理模式、外观模式区别
- Git简明教程
- UIScrollView 边界问题处理
- java中Object.toString() ,(String)Object,String.valueOf(Object)的区别
- UIBezierPath精讲
- Google推荐的图片加载库Glide介绍
- 黑马程序员----十八-Map集合
- 第三方授权登陆 分享功能
- 记不住就存下来---- HTML 5 超链接和锚点
- eclipse使用心得(不断更新中)
- JS判断手机纵向滑动