UIScrollView
1.UIScrollView的iOS中提供了滑块控件,用来解决当内容区域大于
UIScrollView的可视区域时,可以通过滑动的方法看整个内容区域,
UIScrollView的滑动控件的基类,后期要学的UItabelView(表示图);内部实现的原理是修改视图的bounds
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
1.创建对象
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(20, 20, kScreenWidth - 20*2, kScreenHeight - 20*2)];
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(20, 20, kScreenWidth - 20*2, kScreenHeight - 20*2)];
2.配置属性
scrollView.backgroundColor = [UIColor redColor];
//2.1设置内容区域的大小 ################################################
scrollView.contentSize = CGSizeMake(280, 528);
//2.2修改内容区域的偏移量;x变大往左偏,y变大往上偏 #########################
scrollView.contentOffset = CGPointMake(0, 0);
//2.3是否显示滚动指示条
scrollView.showsHorizontalScrollIndicator =NO;
scrollView.showsVerticalScrollIndicator =NO;
//2.4修改滚动指示条的颜色
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
//2.5设置scrollView能否滚动
scrollView.scrollEnabled = YES;
//2.6方向锁,设置滑动时只能朝一个方向滑动
scrollView.directionalLockEnabled = NO;
//2.7设置能否整屏滚动
scrollView.pagingEnabled = YES;
//2.8设置当滑动到屏幕边缘的时候是否出现反弹的效果
scrollView.bounces = YES;
//2.9设置当内容区域等于或者小于可视区域时,依然具有边界反弹效果
scrollView.alwaysBounceHorizontal = YES;
scrollView.alwaysBounceVertical = YES;
//2.10设置点击状态栏scorllView是否回到顶部,此时y轴上的偏移量为0;默认为YES
scrollView.scrollsToTop = YES;
//2.11scorollView的代理属性
//self指的是视图控制器对象
scrollView.delegate = self;
//2.12设置scrollView的缩放比例
scrollView.minimumZoomScale = 0.5;
scrollView.maximumZoomScale = 3.0;
scrollView.backgroundColor = [UIColor redColor];
//2.1设置内容区域的大小 ################################################
scrollView.contentSize = CGSizeMake(280, 528);
//2.2修改内容区域的偏移量;x变大往左偏,y变大往上偏 #########################
scrollView.contentOffset = CGPointMake(0, 0);
//2.3是否显示滚动指示条
scrollView.showsHorizontalScrollIndicator =NO;
scrollView.showsVerticalScrollIndicator =NO;
//2.4修改滚动指示条的颜色
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
//2.5设置scrollView能否滚动
scrollView.scrollEnabled = YES;
//2.6方向锁,设置滑动时只能朝一个方向滑动
scrollView.directionalLockEnabled = NO;
//2.7设置能否整屏滚动
scrollView.pagingEnabled = YES;
//2.8设置当滑动到屏幕边缘的时候是否出现反弹的效果
scrollView.bounces = YES;
//2.9设置当内容区域等于或者小于可视区域时,依然具有边界反弹效果
scrollView.alwaysBounceHorizontal = YES;
scrollView.alwaysBounceVertical = YES;
//2.10设置点击状态栏scorllView是否回到顶部,此时y轴上的偏移量为0;默认为YES
scrollView.scrollsToTop = YES;
//2.11scorollView的代理属性
//self指的是视图控制器对象
scrollView.delegate = self;
//2.12设置scrollView的缩放比例
scrollView.minimumZoomScale = 0.5;
scrollView.maximumZoomScale = 3.0;
//3.添加到父视图
[self.view addSubview:scrollView];
//4.释放
[scrollView release];
//UIImage继承NSobject
UIImage *image = [UIImage imageNamed:@"4.JPG"];
UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
imageView.tag = 101;
imageView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView addSubview:imageView];
[imageView release];
[self.view addSubview:scrollView];
//4.释放
[scrollView release];
//UIImage继承NSobject
UIImage *image = [UIImage imageNamed:@"4.JPG"];
UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
imageView.tag = 101;
imageView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView addSubview:imageView];
[imageView release];
#pragma mark scrollView代理方法
//1.触发时机:只要scrollView滚动,就会一直触发,会触发多次
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// NSLog(@"滚了没!!");
//能够及时获得偏移量
// NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
}// any offset changes
//2.触发时机:只要进行缩放操作就会一直触发,触发多次
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2)
{
// NSLog(@"缩放了没!!");
// NSLog(@"%.2f",scrollView.zoomScale);
//存放scrollview的size
CGSize sSize = scrollView.frame.size;
// 取出imageView的frame
CGRect iFrame = ((UIImageView *)[scrollView viewWithTag:101]).frame;
//缩放后x的坐标
CGFloat x= (sSize.width - scrollView.contentSize.width)/2;
// 缩放后y的坐标
CGFloat y= (sSize.height - scrollView.contentSize.height)/2;
// 把求出来的变化量赋值给iframe
iFrame.origin.x = x;
iFrame.origin.y = y;
((UIImageView *) [scrollView viewWithTag:101]).frame = iFrame;
//缩小过程中contentsize就是imageView宽和高,所以只需求缩小过程中x,y的坐标即可
}// any zoom scale changes
// called on start of dragging (may require some time and or distance to move)
//3.触发时机:scrollview将要开始拖拽的时候触发(手指刚刚开始触摸到scrollview时候)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// NSLog(@"开始拖拽了没!!!");
}
// called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest
//4.触发时机:scrollview将要结束拖拽的时候触发
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0)
{
// NSLog(@"快脱完了吗???");
}
// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
//5.触发时机:scrollview已经结束拖拽了
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// NSLog(@"结束了吗?");
// 在此方法中拿到contenOffSet的偏移量
}
//6.触发时机:将要开始减速的时候触发(此方法不一定会触发)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
// NSLog(@"减速了吗?");
}// called on finger up as we are moving
//7.触发时机:以及结束减速的时候触发(此方法不一定会触发)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// NSLog(@"减完速了吗");
//一般都在这个方法中获取scrollview的偏移量,或者设置scrollview的偏移量
// scrollView.contentOffset = CGPointZero;
// [scrollView setContentOffset:CGPointZero animated:YES];
}// called when scroll view grinds to a halt
//8.触发时机:scrollview结束减速,并且带有动画效果的才会触发(必须要有动画效果哎)必须有7的配合
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
// NSLog(@"有动画吗?");
}// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
//9.触发时机:返回缩放后的视图,但是只能返回scrollView上的子视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return [scrollView viewWithTag:101];
}// return a view that will be scaled. if delegate returns nil, nothing happens
//10.触发时机:scrollview开始缩放的时候触发
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2)
{
// NSLog(@"开始缩放了吗?");
}// called before the scroll view begins zooming its content
//11.触发时机:结束缩放的时候触发
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
NSLog(@"结束缩放了吗?");
}// scale between minimum and maximum. called after any 'bounce' animations
//12.
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
return YES;
}// return a yes if you want to scroll to the top. if not defined, assumes YES
//13.
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
}// called when scrolling animation finished. may be called immediately if already at top
/*
scrollview的使用技巧:
使用scrollViewDidZoom:适时修改自身视图的大小
使用scrollViewDidEndDecelerating:获取contenOffSet
//1.触发时机:只要scrollView滚动,就会一直触发,会触发多次
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// NSLog(@"滚了没!!");
//能够及时获得偏移量
// NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
}// any offset changes
//2.触发时机:只要进行缩放操作就会一直触发,触发多次
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2)
{
// NSLog(@"缩放了没!!");
// NSLog(@"%.2f",scrollView.zoomScale);
//存放scrollview的size
CGSize sSize = scrollView.frame.size;
// 取出imageView的frame
CGRect iFrame = ((UIImageView *)[scrollView viewWithTag:101]).frame;
//缩放后x的坐标
CGFloat x= (sSize.width - scrollView.contentSize.width)/2;
// 缩放后y的坐标
CGFloat y= (sSize.height - scrollView.contentSize.height)/2;
// 把求出来的变化量赋值给iframe
iFrame.origin.x = x;
iFrame.origin.y = y;
((UIImageView *) [scrollView viewWithTag:101]).frame = iFrame;
//缩小过程中contentsize就是imageView宽和高,所以只需求缩小过程中x,y的坐标即可
}// any zoom scale changes
// called on start of dragging (may require some time and or distance to move)
//3.触发时机:scrollview将要开始拖拽的时候触发(手指刚刚开始触摸到scrollview时候)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// NSLog(@"开始拖拽了没!!!");
}
// called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest
//4.触发时机:scrollview将要结束拖拽的时候触发
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0)
{
// NSLog(@"快脱完了吗???");
}
// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
//5.触发时机:scrollview已经结束拖拽了
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// NSLog(@"结束了吗?");
// 在此方法中拿到contenOffSet的偏移量
}
//6.触发时机:将要开始减速的时候触发(此方法不一定会触发)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
// NSLog(@"减速了吗?");
}// called on finger up as we are moving
//7.触发时机:以及结束减速的时候触发(此方法不一定会触发)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// NSLog(@"减完速了吗");
//一般都在这个方法中获取scrollview的偏移量,或者设置scrollview的偏移量
// scrollView.contentOffset = CGPointZero;
// [scrollView setContentOffset:CGPointZero animated:YES];
}// called when scroll view grinds to a halt
//8.触发时机:scrollview结束减速,并且带有动画效果的才会触发(必须要有动画效果哎)必须有7的配合
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
// NSLog(@"有动画吗?");
}// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
//9.触发时机:返回缩放后的视图,但是只能返回scrollView上的子视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return [scrollView viewWithTag:101];
}// return a view that will be scaled. if delegate returns nil, nothing happens
//10.触发时机:scrollview开始缩放的时候触发
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2)
{
// NSLog(@"开始缩放了吗?");
}// called before the scroll view begins zooming its content
//11.触发时机:结束缩放的时候触发
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
NSLog(@"结束缩放了吗?");
}// scale between minimum and maximum. called after any 'bounce' animations
//12.
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
return YES;
}// return a yes if you want to scroll to the top. if not defined, assumes YES
//13.
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
}// called when scrolling animation finished. may be called immediately if already at top
/*
scrollview的使用技巧:
使用scrollViewDidZoom:适时修改自身视图的大小
使用scrollViewDidEndDecelerating:获取contenOffSet
UIPageControl分页控制器
UIPageControl是ios中提供的分页控制器,用来表示总的页数,可以通过点击pageContrl切换分页,继承UIcontrol
*/
//1创建对象
UIPageControl *aPage = [[UIPageControl alloc]initWithFrame:CGRectMake(20, 100, 280, 30)];
// 2.配置属性
//2.1设置分页个数
aPage.numberOfPages= 5;
//2.2配置当前分页点的颜色
aPage.currentPageIndicatorTintColor = [UIColor redColor];
// aPage.backgroundColor = [UIColor greenColor];一般不给pageControl背景颜色
//2.3配置其他分页的颜色
aPage.pageIndicatorTintColor = [UIColor whiteColor];
//2.4设置pageControl的当前页
aPage.currentPage = 3;
//2.5配置关联事件#####################
[aPage addTarget:self action:@selector(handlePage:) forControlEvents:(UIControlEventValueChanged)];
//3.添加父视图上
[self.view addSubview:aPage];
//4.释放
[aPage release];
*/
//1创建对象
UIPageControl *aPage = [[UIPageControl alloc]initWithFrame:CGRectMake(20, 100, 280, 30)];
// 2.配置属性
//2.1设置分页个数
aPage.numberOfPages= 5;
//2.2配置当前分页点的颜色
aPage.currentPageIndicatorTintColor = [UIColor redColor];
// aPage.backgroundColor = [UIColor greenColor];一般不给pageControl背景颜色
//2.3配置其他分页的颜色
aPage.pageIndicatorTintColor = [UIColor whiteColor];
//2.4设置pageControl的当前页
aPage.currentPage = 3;
//2.5配置关联事件#####################
[aPage addTarget:self action:@selector(handlePage:) forControlEvents:(UIControlEventValueChanged)];
//3.添加父视图上
[self.view addSubview:aPage];
//4.释放
[aPage release];