UIScrollView语法用法样例

#import "RootViewController.h"

#define kScreenSize [UIScreen mainScreen].bounds.size
#define kPrintDebug NSLog(@"%s",__func__)


@interface RootViewController ()<UIScrollViewDelegate>
{
    
    UIScrollView *_scrollView;
}
@end

@implementation RootViewController
- (void)dealloc {
    [_scrollView release];
    [super dealloc];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor lightGrayColor];
    [self creatScrollView];
}
/*
 
 - imageNamed:
 - imageWithContentsOfFile:
 区别:
 1.- imageNamed: 加载图片
    第一次 加载的时候 会把图片从app包内(手机磁盘) 加载到手机内存的缓存中,下次如果再加载相同的图片那么直接从缓存中加载,提高效率。但是缓存是有限的,app程序都要用到缓存,如果缓存低了那么直接影响app 运行效率。- imageNamed:方式加载的对象 是不释放的
    应用场合:加载小图片 (几kb 几十kb),少量图片
 
 2.- imageWithContentsOfFile: 加载图片
 每次调用都会从app包内(磁盘) 中 获取,用完之后 也会自动释放。但是相对于- imageNamed:加载效率低一些
 
 */

- (void)creatScrollView {
    
    
    //实例化一个滚动视图对象
    //内容 是可以滚动的
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, kScreenSize.width, kScreenSize.height-90)];
    
    //UIImage *image = [UIImage imageNamed: @"car4"];
    
    //获取图片在app包内的路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"];
    UIImage *image = [UIImage imageWithContentsOfFile:path];
    //设置图片的真实大小
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
    imageView.image = image;
    //粘贴到滚动视图
    [_scrollView addSubview:imageView];
    [imageView release];
    
   //背景颜色
    _scrollView.backgroundColor = [UIColor redColor];
    
    //1.滚动视图的内容一般要大于 滚动视图的范围
    //2.设置 滚动视图的 滚动范围 (滚动范围 一般就是 内容的大小范围)
    // 滚动区域范围 > 滚动视图的范围
    
    //设置滚动视图的滚动区域范围(要想滚动必须设置滚动内容大小)
    _scrollView.contentSize = imageView.bounds.size;
    
    //设置回弹(默认可以回弹)
    _scrollView.bounces = YES;
    
    //显示或者隐藏 滚动条 默认显示
    _scrollView.showsHorizontalScrollIndicator = NO;//水平
    _scrollView.showsVerticalScrollIndicator = NO;//竖直
    //设置 是否可以滚动  NO禁用滚动
    //_scrollView.scrollEnabled = NO;
    
    //设置方向锁
    _scrollView.directionalLockEnabled = YES;//同时允许一个方向滚动
    
    //设置 内容 偏移量(相对于 粘到到滚动视图的位置滚动偏移)
    
    //如果偏移量CGPointMake(-50 ,-50) 内容会向 右 下偏移
    //如果偏移量CGPointMake(50 ,50)   内容会向 左 上偏移
    
    //_scrollView.contentOffset = CGPointMake(-50 ,-50);
    
    //点击状态栏是否可以滚动到内容视图的顶部
    _scrollView.scrollsToTop = YES;
    
    //设置缩放(必须设置代理 实现协议的方法)
    //实现- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    _scrollView.minimumZoomScale = 0.5;
    _scrollView.maximumZoomScale = 2.0;
    
    //设置代理
    _scrollView.delegate = self;
    
    //self.view当前视图是RootViewVontroller,
    [self.view addSubview:_scrollView];
}
#pragma mark - UIScrollViewDelegate
//常用1
//当 缩放 滚动视图 的视图 通知代理 返回一个指定 内容视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    //返回需要缩放的视图地址
    //当前滚动视图中只有 一个 视图
    return scrollView.subviews[0];
}
//常用2
//手指 将要拖拽滚动视图的时候调用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    kPrintDebug;
}
//常用3
//滚动视图滚动的时候调用 滚动的时候一直调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //kPrintDebug;
    //CGPoint point = scrollView.contentOffset;
    //NSLog(@"偏移量:%@",NSStringFromCGPoint(point));
}
//常用4
//将要结束拖拽的时候调用
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    kPrintDebug;
}
//常用5
//已经结束拖拽调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    kPrintDebug;
}
//常用6
//将要开始 减速停止 的时候调用
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    kPrintDebug;
}
//常用7
//已经 减速停止的时候调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    kPrintDebug;
}

//扩展
//将要开始 变形的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
    kPrintDebug;
}
//变形过程中一直调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    kPrintDebug;
}
//变形结束的时候调用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
    kPrintDebug;
}

//下面两个协议方法 有效 必须 设置滚动视图的_scrollView.scrollsToTop = YES;为yes

//_scrollView.scrollsToTop = YES;
//上面设置之后 可以通过 代理的协议的方法设置点击状态栏时候可以滚动顶部

//通过代理设置 点击状态栏是否可以滚动到顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    kPrintDebug;
    return YES;
}
//点击状态栏已经滚动到顶部
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
    kPrintDebug;
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end


你可能感兴趣的:(uiscrollview)