UIScrollView 边界问题处理
2016-01-18 17:20
477 查看
在写引导页 或者 教学页的时候 会有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 边界问题。 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
相关文章推荐
- iOS开发中使用UIScrollView实现图片轮播和点击加载
- 顶部可滚动小广告位 的封装 (UIScrollView+PageControl)
- ios7 中关于导航切换影响UIScrollView的问题
- 两个UIScrollVIew能够同步滚动
- UIScrollview要加载大量数据的时候,考虑到内存的消耗问题,我们不可能全部加载完。
- UIScrollview 无缝循环滚动实现
- 解决 IOS的UIScrollView的自动布局
- UIScrollView无法滚动的问题
- cocos2d-x 一些有用的函数
- IOS UIscrollView 控件
- 关于NGUI中UITexture贴图自定义的shader文件在UISrollView中不报错的解决方案
- 缩放图片
- UIScrollView缩放
- UIScrollView的属性总结
- UIScrollView常用属性及回调方法
- IOS-UIScrollView滚动图片的简单实现
- UIScrollView的使用大全--contentsize,contentInset和contentInset
- 使用UINavigationController后导致UIScollView尺寸变化(转)
- UIScrollView里面实现视图的移动缩放,点击事件
- iOS广告轮播视图