UIScrollView && UIPageControl


//RootViewController.m


           // UISrollView

//UIScrollView是可以滚动的view,UIView本⾝不能滚动,子类UIScrollview拓展了滚动⽅面的功能。UIScrollView是所有滚动视图的基类。以后的UITableView,UITextView等视图都是继承于该类。使⽤场景:显⽰不下(单张大图);内容太多(图⽂混排);滚动头条(图⽚);相册等

//UIScrollView核⼼功能UIScrollview主要专长于两个⽅面:滚动:contentSize大于frame.size的时候,能够滚动。缩放:⾃带缩放,可以指定缩放倍数。

//contentSize  定义内容区域⼤小,决定是否能够滑动

//contentOffset 视图左上⾓距离坐标原点的偏移量

//scrollsToTop   滑动到顶部(点状态条的时候)

//pagingEnabled   是否整屏翻动

//bounces 边界是否回弹

//UIScrollView    滚动相关属性

//scrollEnabled   是否能够滚动

//showsHorizontalScrollIndicator   控制是否显示⽔平方向的滚动条

//showVerticalScrollIndicator  控制是否显⽰垂直方向的滚动条

//alwaysBounceVertical      控制垂直⽅向遇到边框是否反弹

//alwaysBounceHorizontal    控制⽔平⽅向遇到边框是否反弹

//UIScrollView    缩放相关属性

//minimumZoomScale   缩小的最⼩比例

//maximumZoomScale  放⼤的最⼤比例

//zoomScale   设置变化比例

//zooming     判断是否正在进行缩放反弹

//bouncesZoom 控制缩放的时候是否会反弹。要实现缩放,还需要实现delegate,指定缩放的视图是谁。

          //UIPageControl

//UIPageControl从类名中可以看出,其父类是UIControl。

//currentPage 当前页

//numberOfPages   指定⻚面的个数

//所以可以像button一样添加事件,只不过事件触发使用的不是UIControlEventsTouchUpInside而是UIControlEventsValueChanged。

 

//UIPageControl和UIScrollView相结合pageControl与scrollview合⽤通常在Scrollview滚动的时候修改pageControl的currentPage使用场景:引导⻚⾸页的

 

//  contentSize决定了scrollView能否滚动,contentOffset控制内容区域的偏移量,pageEnabled控制能否整⻚滚动。scrollView实现缩放需要指定最大缩放系数,最小缩放系数,并指定缩放的视图。pageControl不单独使用,通常与scrollView结合使用

 

/*             滚动代理方法

滚动就会触发

- (void)scrollViewDidScroll:(UIScrollView*)scrollView

 

开始拖拽时触发

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

 

结束拖拽时触发

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

 

开始减速时触发

- (void)scrollViewWillBeginDecelerating:

(UIScrollView *)scrollView

 

结束减速时触发(停⽌止时)

- (void)scrollViewDidEndDecelerating:

(UIScrollView *)scrollView

 

     UIScrollView 缩放代理方法delegate

 

完成放⼤缩⼩触发

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

 

指定某个UIScrollView的子视图可以被放⼤缩⼩

- (UIView *)viewForZoomingInScrollView:

(UIScrollView *)scrollView

 */

 

 

#import "RootViewController.h"

#import "SecondViewController.h"

 

@interface RootViewController()<UIScrollViewDelegate>

 

// 分别代表屏幕宽和高

#define ScreenWidthself.view.bounds.size.width

#define ScreenHeightself.view.bounds.size.height

 

@property (nonatomic,retain)UIScrollView*scrV;

@property (nonatomic,retain)UIPageControl*page;

@end

 

@implementation RootViewController

 

- (void)dealloc{

   [_page release];

   [_scrV release];

   [super dealloc];

}

 

- (void)viewDidLoad {

   [super viewDidLoad];

   // 设置 UIScrollView 的视图大小,若内容尺寸(contentSize)大小大于UIScrollView的视图大小,则可以滚动。

self.scrV = [[UIScrollViewalloc]initWithFrame:[UIScreen mainScreen].bounds];

for (int i = 1; i < 5; i++) {

       NSString *str = [NSString stringWithFormat:@"%d.png",i];

       UIImage *image = [UIImage imageNamed:str];

        UIImageView *imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(i * ScreenWidth,0, ScreenWidth, ScreenHeight)];

        // 设置图片视图

imageView.image = image;

       // 将图片视图作为滚动视图的contentSizeView。 (内容视图)

       [self.scrV addSubview:imageView];

       // 释放

       [imageView release];

    }

   // 设置滚动视图的内容大小 (滚动范围)

   // 当滚动范围小于等于屏幕大小的时候,不能滚动。

self.scrV.contentSize = CGSizeMake(6 *ScreenWidth,ScreenHeight);

   // 设置整页翻动

self.scrV.pagingEnabled = YES;

   // 是否显示水平滚动条

self.scrV.showsHorizontalScrollIndicator =NO;

//   // 是否显示垂直滚动条

//   self.scrV.showsVerticalScrollIndicator = NO;

    // 边缘反弹(默认为YES)

self.scrV.bounces = NO;

//   //点击状态栏跳到最上面(点击屏幕最上面,图片直接出现,内容的Height要大于屏幕高度)

//   self.scrV.scrollsToTop = NO;

 

   // 设置偏移量(默认偏移量是原点(0,0)),显示  1.png

self.scrV.contentOffset =CGPointMake(ScreenWidth, 0);

   //将滚动视图添加到视图上。

   [self.view addSubview:self.scrV];

   // 设置滚动视图的代理

self.scrV.delegate = self;

   [self.scrV release];

 

   // UIPageControl

   // 创建UIPageControl

   UIPageControl *pageC = [[UIPageControlalloc]initWithFrame:CGRectMake(50, 500, 250, 30)];

    //将pageC 赋值给self.page

self.page = pageC;

   // 设置背景颜色

//   pageC.backgroundColor = [UIColor redColor];

   //设置页数

pageC.numberOfPages = 4;

   //设置当前点颜色

pageC.currentPageIndicatorTintColor =[UIColor whiteColor];

   // 设置其它点的颜色

pageC.pageIndicatorTintColor = [UIColorblackColor];

   // 设置当前页数

pageC.currentPage = 0;

   // 添加方法

   [pageC addTarget:self action:@selector(swip:)forControlEvents:UIControlEventValueChanged];

   // 添加到视图上

   [self.view addSubview:pageC];

   [pageC release];

 

 

   UIButton *but = [UIButton buttonWithType:UIButtonTypeCustom];

but.frame = CGRectMake(0, 0, 50, 50);

but.backgroundColor = [UIColor redColor];

   [but addTarget:self action:@selector(tap)forControlEvents:UIControlEventTouchUpInside];

   [self.view addSubview:but];

 

   // 实现轮播图,肉眼看到四张图片,实际上,scrollView中存放了六张图片,需要添加两张辅助图片,用来显示第一张图片和最后一张图片。(scrollView的第一张图片与第五张图片一样,第二张图片与第六张图片一样)

   // 辅助视图,用来显示第一张图片(肉眼看到的是第一张图片,实际上是放在scrollView中的最后一个位置)

   UIImage *image = [UIImage imageNamed:@"1.png"];

   UIImageView *imageV = [[UIImageView alloc]initWithFrame:CGRectMake(5 *ScreenWidth, 0, ScreenWidth, ScreenHeight)];

imageV.image = image;

   [self.scrV addSubview:imageV];

 

   //辅助视图,用来显示最后一张图片(肉眼看到的是最后一张图片,实际上是放在scrollView的第一个位置)

   UIImage *image1 = [UIImage imageNamed:@"4.png"];

   UIImageView *imageV1 = [[UIImageView alloc]initWithFrame:CGRectMake(0,0, ScreenWidth, ScreenHeight)];

imageV1.image = image1;

   [self.scrV addSubview:imageV1];

 

}

 

- (void)swip:(UIPageControl *)page{

NSLog(@"%ld",page.currentPage);

self.scrV.contentOffset =CGPointMake(page.currentPage * ScreenWidth, 0);

 

}

 

- (void)tap{

   SecondViewController *sec = [[SecondViewController alloc]init];

   [self presentViewController:sec animated:YES completion:^{

 

   }];

}

   //偏移量改变的时候执行

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

  //NSLog(@"偏移量改变");

}

 

  // 手指点击开始拖拽时执行一次。

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

   NSLog(@"开始拖拽");

}

    // 手指不拖拽时执行一次

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollViewwillDecelerate:(BOOL)decelerate{

   NSLog(@"结束拖拽");

}

       //开始减速时

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

   NSLog(@"即将减速");

}

      //图片移动停止时执行

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

   NSLog(@"结束减速");

   //将PageC和滚动视图联系起来

   //轮播图的实现

    // 即翻到 scrollView中的最后一张视图时,跳转到肉眼看到的第一张图

if (scrollView.contentOffset.x /ScreenWidth == 5) {

self.page.currentPage = 0;

self.scrV.contentOffset =CGPointMake(ScreenWidth, 0);

    // 即翻到 scrollView中的第一张视图时,跳转到肉眼看到的最后一张图

}else if(scrollView.contentOffset.x /ScreenWidth == 0){

self.page.currentPage = 3;

self.scrV.contentOffset = CGPointMake(4 *ScreenWidth, 0);

}else{

self.page.currentPage =scrollView.contentOffset.x / ScreenWidth - 1;

    }

}

 

- (void)didReceiveMemoryWarning {

   [super didReceiveMemoryWarning];

   // Dispose of any resources that can be recreated.

}

 

 

 

@end

 

 

 

 

//

//  SecondViewController.m


 

#import "SecondViewController.h"

 

#define ScreenWidthself.view.bounds.size.width

#define ScreenHeightself.view.bounds.size.height

 

@interface SecondViewController ()

 

 

@end

 

@implementation SecondViewController

 

- (void)viewDidLoad {

   [super viewDidLoad];

   // 创建一张图片

   UIImage *image = [UIImage imageNamed:@"1.png"];

   // 创建图片视图

   UIImageView *imageV = [[UIImageView alloc]initWithFrame:[UIScreenmainScreen].bounds];

   // 设置图片视图

imageV.image = image;

   // 设置滚动视图

   UIScrollView *scrV = [[UIScrollView alloc]initWithFrame:[UIScreenmainScreen].bounds];

   // 设置滚动视图最小以及最大的缩放比例

scrV.maximumZoomScale = 2;

scrV.minimumZoomScale = 0.5;

   //添加图片视图

   [scrV addSubview:imageV];

   // 添加滚动视图

   [self.view addSubview:scrV];

scrV.delegate = self;

 

}

 

- (void)didReceiveMemoryWarning {

   [super didReceiveMemoryWarning];

   // Dispose of any resources that can be recreated.

}

 

  // 协议的方法

  // 缩放比例变化就会使用此方法

- (void)scrollViewDidZoom:(UIScrollView*)scrollView{

   NSLog(@"正在缩放");

   UIImageView *imageV = [scrollView subviews][0];

if (scrollView.zoomScale < 1) {

imageV.center = CGPointMake(207, 368);

    }

}

 

   //确定哪个视图被缩放

- (nullable UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{

   UIImageView *imageV = [scrollView subviews][0];

//   if (scrollView.zoomScale < 1) {

//       imageV.center = CGPointMake(207, 368);

//   }

return imageV;

}

 

   //已经完成缩放

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullableUIView *)view atScale:(CGFloat)scale{

//   scrollView.zoomScale = scale;

 

}

@end

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值