UIScrollview UIPageViewCon troller

1、UIScorollView    是ios中提供的滑动控件,用来解决当内容区域大于scorollView可视区域时,可以通过滑动的方式查看整个内容区域,UIScorollView 的滑动控件的基类,后期药学的UITableView(表视图),内部实现的原理是修改视图的bounds

//1.创建对象
    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(20, 20,kScreenWidth - 20 * 2, kScreenHeight - 20 *2)];
    //2.配置属性

//    scrollView.backgroundColor = [UIColor redColor];
    //2.1 设置内容区域的大小
    scrollView.contentSize = CGSizeMake(500, 1000);
    //2.2 修改内容区域的偏移量
    //x变大,往左偏移,y变大往上偏移 1
//    scrollView.contentOffset =  CGPointMake(140, 400);
    //2.3 是否显示滚动指示条
    scrollView.showsHorizontalScrollIndicator = NO;//默认为YES
    scrollView.showsVerticalScrollIndicator = NO;//默认为YES
    //2.4 修改滚动指示条的样式
//    scrollView.indicatorStyle =  UIScrollViewIndicatorStyleWhite;
    //2.5 设置scrollView 能否滚动
    scrollView.scrollEnabled = YES;//默认为YES
    //2.6 设置方向锁,设置滑动时只能从一个方向滚动
    scrollView.directionalLockEnabled = NO;//默认为NO
    //2.7 设置是否整屏滚动

scrollView.pagingEnabled = YES;//默认为NO

//2.8 设置当滑动到屏幕边缘的时候是否出现反弹效果

scrollView.bounces = YES;//默认为YES

//2.9 设置当内容区域等于或小于可视区域时,依然具有边界反弹效果

//水平方向

scrollView.alwaysBounceHorizontal = YES;//默认为NO

//垂直方向

scrollView.alwaysBounceVertical = YES;//默认为NO   
    //2.10 设置点击状态栏,scrollView 是否回到顶部,此时y轴的偏移量是0

scrollView.scrollsToTop = YES;//默认为YES

//2.11 scrollView 的代理属性
    //self指试图控制器对象

scrollView.delegate = self;

//2.12 设置scrollView的缩放比例
    scrollView.minimumZoomScale =  0.5;

scrollView.maximumZoomScale = 3.0;

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];
    [self.view addSubview:scrollView];
    //释放所有权
    [scrollView release];

}

——————————————————————————-——————

scrollView 的代理属性的13个方法及用途

//触发时机:ScrollView 将要开始拖拽idea时候触发(此时手指刚刚触摸到scrollView的时候)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
   
    NSLog(@"开始拖拽了没?");
}

//触发时机:ScrollView 将要结束拖拽的时候触发
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffsetNS_AVAILABLE_IOS(5_0){
    NSLog(@"拖拽结束了没?");
   
}

//触发时机:ScrollView 已经结束拖拽的时候触发
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"结束了没?好快啊!");
    //在此方法中能拿到contenOfSet的偏移量
}

//触发时机:将要减速的时候触发(此方法不一定触发,匀速不一定触发)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    NSLog(@"减速了么?");
}

//触发时机:已经结束减速的时候触发(此方法不一定触发,上面的减速方法不触发,这个结束减速的方法就不会触发)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSLog(@"加速完了吗?");
    //一般在这个方法中获取scrollView的偏移量,或者设置scrollView的偏移量

//    scrollView.contentOffset = CGPointZero;

//    [scrollView setContentOffset:CGPointZero animated:YES];
}

//触发时机:scrollView结束减速并且必须有动画效果才会触发(必须要有动画效果偶)
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
    NSLog(@"有动画吗");
}

//触发时机,返回缩放后的视图,但是只能返回scrollView(内容)上的子视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    return [scrollView viewWithTag:101];
}

//触发时机:开始缩放的时候触发
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)viewNS_AVAILABLE_IOS(3_2){
    NSLog(@"开始缩放了吗");
}
//触发时机:结束缩放的时候触发
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
    NSLog(@"结束缩放了吗");
}

//触发时机:点击状态栏,调用该方法,该方法能实现的前提是scrollToTop的属性是YES
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{
    return YES;
}

//触发时机:scrollView 已经回到顶部了
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{

}

总结:scrollView的使用技巧
             使用scrollViewDidZoom: 实时修改自身视图的大小
             使用scrollViewDidEndDecelerating: 获取contentOfSet

==============================================================

LaunchViewController.m

#import "LaunchViewController.h"
#import "PageViewController.h"
//图片个数
#define kImageCount 6
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight  [UIScreen mainScreen].bounds.size.height
@interface LaunchViewController ()<</span>UIScrollViewDelegate>
//定义属性方便使用
@property(nonatomic,retain)UIScrollView *scrollView;
@property(nonatomic,retain)UIPageControl *pageControl;
@end

@implementation LaunchViewController
- (void)dealloc{
    _scrollView = nil;
    _pageControl = nil;
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];

//再添加scrollView
    [self layoutScrollView];
    //先添加pageControl
    [self layoutPageControl];
   
}

//布局scrollView
- (void)layoutScrollView{
    self.scrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    //设置内容页的大小
    self.scrollView.contentSize = CGSizeMake(kImageCount * kScreenWidth, kScreenHeight);
    //隐藏水平指示条
    self.scrollView.showsHorizontalScrollIndicator = NO;
    //整屏滑动
    self.scrollView.pagingEnabled = YES;
    //制定代理
    self.scrollView.delegate = self;
   
    //添加图片
    for (int i = 0; i <</span> kImageCount; i ++ ) {
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(i *kScreenWidth, 0, kScreenWidth, kScreenHeight)];
        //图片名
        NSString *name = [NSString stringWithFormat:@"v6_guide_%d",i + 1];
        //初始化UIImage 对象
        UIImage *image = [UIImage imageNamed:name];
        imageView.image = image;
        [self.scrollView addSubview:imageView];
       
        [imageView release];
       
        //添加手势
        if (kImageCount - 1  == i) {
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:selfaction:@selector(handleTap:  )];

[imageView addGestureRecognizer:tap];

[tap release];

//打开用户交互

imageView.userInteractionEnabled = YES;

}
    }

self.scrollView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:self.scrollView];
    [self.scrollView release];

}

PageViewController.m

#pragma mark pageControl的实现
- (void)layoutPageControl{
    _pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, kScreenHeight - 60,kScreenWidth, 60)];
    _pageControl.numberOfPages = kImageCount;
    //配置点的颜色
    _pageControl.currentPageIndicatorTintColor = [UIColor redColor];
    //配置其他点的颜色

_pageControl.pageIndicatorTintColor = [UIColor greenColor];

//给pageControl 关联事件

[_pageControl addTarget:self action:@selector(handlePage : ) forControlEvents:(UIControlEventValueChanged)];

[self.view addSubview:_pageControl];

[_pageControl release];

}

#pragma mark  是轻拍手势的实现
- (void)handleTap : (UITapGestureRecognizer *)tap{
    NSLog(@"轻拍了嘛?");
    //是一个单例,可以实现数据持久化,当用户点击到最后一张图片时,引导图启动结束,此时在用户偏好中做一个标记,并把这个标记存储起来
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
   
    [user setBool:YES forKey:@"daociyiyou"];
    //赋值之后立即同步,作用是将事件标记的值存储起来

[user synchronize];

//实现点击最后一张图片进入用户进入用户界面
    PageViewController *pageVC = [[PageViewController alloc]init];
    //更换当前的window 的根视图控制器,将pageVC设置为主界面
   
    //取出当前的应用程序对象
    [UIApplication sharedApplication].keyWindow.rootViewController = pageVC;
   
    [pageVC release];
   
}

#pragma mark scrollView的实现
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //求出scrollView内容在x轴偏移量
    CGFloat x = _scrollView.contentOffset.x;
    //求出pageCrontrol对应的下标
    _pageControl.currentPage = x / kScreenWidth;
}

- (void)handlePage : (UIPageControl *)page{
   
    NSLog(@"%ld",page.currentPage);
   
    //让_scrollView 跟pageControl 页数的改变而改变

_scrollView.contentOffset = CGPointMake(page.currentPage * kScreenWidth, 0);

}

————————————————————————————————

AppDelegate.m

//根据判断条件让运行程序启动引导界面
    //获取用户对象,用户对象中存储的是一些有用的偏好设置
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

if ([user boolForKey:@"daociyiyou"] != NO) {

//    //根视图控制器

self.window.rootViewController = [PageViewController new];

}else{
        //根视图
        self.window.rootViewController = [LaunchViewController new];
    }
    return YES;

}

最终效果:

时间: 2024-10-11 00:02:56

UIScrollview UIPageViewCon troller的相关文章

UIScrollView的缩放原理

有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScrollView中 当用户在UIScrollView身上使用捏合手势时,UIScrollView会给代理发送一条消息,询问代理究竟要缩放自己内部的哪一个子控件(哪一块内容) 当用户在UIScrollView身上使用捏合手势时,UIScrollView会调用代理的viewForZoomingInScroll

iOS 视图:重绘与UIScrollView(内容根据iOS编程编写)

我们继续之前的 Hypnosister 应用,当用户开始触摸的时候,圆形的颜色会改变. 首先,在 JXHypnosisView 头文件中声明一个属性,用来表示圆形的颜色. #import "JXHypnosisView.h" @interface JXHypnosisView () /** 颜色 */ @property (nonatomic,strong) UIColor * circleColor; @end @implementation JXHypnosisView - (in

Swift - 用UIScrollView实现视差动画效果

效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoView.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class MoreInfoView: UIView { var imageV

UIScrollView控件介绍

一.知识点简单介绍 1.UIScrollView控件是什么? (1)移动设备的屏幕?大?小是极其有限的,因此直接展?示在?用户眼前的内容也相当有限 (2)当展?示的内容较多,超出?一个屏幕时,?用户可通过滚动?手势来查看屏幕以外的内容 (3)普通的UIView不具备滚动功能,不能显?示过多的内容 (4)UIScrollView是一个能够滚动的视图控件,可以?用来展?示?大量的内容,并且可以通过滚 动查看所有的内容 (5)  举例:手机上的“设置”.其他?示例程序 2.UIScrollView的简

0130——UIScrollView

1.contentSize幕布实际大小决定滚动的方向,如果小于图片本身不滚动,默认也是不滚动 view.contentSize = CGSizeMake(1280, 200); 而frame只是用来显示UIScrollView的显示区域的大小用户看的到的. 2.页面效果,图片不可以停留在两张图中间 sview.pagingEnabled = YES; 3.是否有横向竖向滚动条,滚动条的样式黑色白色 sview.showsHorizontalScrollIndicator = NO; sview.

UIScrollView视差模糊效果

效果 源码 https://github.com/YouXianMing/Animations // // ScrollBlurImageViewController.m // Animations // // Created by YouXianMing on 15/11/25. // Copyright © 2015年 YouXianMing. All rights reserved. // #import "ScrollBlurImageViewController.h" #im

iOS学习之UIScrollView初步

UIScrollView相对于UIView而言,UIScrollView是一个能够滚动的视图控件,可以展示更多的内容 UIScrollView的基本用法: 1.在storyboard界面添加UIScrollView控件 2.将要展示的内容添加到UIScrollView 中. 3.设置UIScrollView的contentSize属性,告诉UIScrollView所有内容的尺?寸 以上均可在storyboard中实现 在代码中实现如下 - (void)viewDidLoad { [super v

UISCrollView —— 图片轮播器封装实现(三)——(第三讲)

1.分析 利用xib布局,然后自定义一个UIView,解析xib,然后利用控制器传入数据,将其加载到控制器的view上展示即可 2. 程序结构 3. 代码具体实现 1>  xib文件 2>  创建类 XMGPageView,然后将其与xib文件关联,选中xib文件,然后设置下文中 " custom class " 为定义的类,让其来管理xib 1>    (如图,设置xib与类关联) 2>  XMGPageView.h 文件中,声明分页图片数组属性,及其一个快速

UIScrollView UIPageController NSTimer 图片轮播

实现轮播视图的思路. 1 创建一个UIScrollView 设置他的滚动范围为3张要显示的图片的宽度. 2 图片的显示次序为: 前一张图片,  当前的图片,  后一张图片. 3 当通过手势偏移了一个图片,重新加载3张图片.显示次序同第二步. 具体步骤,先移除UIScrollView上的所有子视图. 接着, 调用方法重新加载这三张图片.  最后设置UIScrollView的偏移量为一张图片的便宜量,注意不能使用动画. demo名为PagedScrollView-可以点击的滚动视图.zip 在文件中