2015-12-15- UI6_UIScrollView

//
// RootViewController.m
// UI6_UIScrollView
//
// Created by YIem on 15/12/14.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "RootViewController.h"

@interface RootViewController () <UIScrollViewDelegate>// 协议

@end

@implementation RootViewController

  • (void)viewDidLoad {

    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    ////********* UIScrollView 滚动视图*************///
    
    //    UIScrollView   是所有滚动视图的基类
    // 功能 : 1.滚动 2.播放

if 0

// 1.创建
UIScrollView *sv = [[UIScrollView alloc]initWithFrame:CGRectMake(100, 100, 200, 200)];
// 2.设置
sv.backgroundColor = [UIColor yellowColor];
// 3.添加父视图
[self.view addSubview:sv];
// 4.内存
[sv release];
// 滚动的条件: 实际内容大小 > 滚动视图自身的frame
////*******<  contentSize  内容大小 >*******////
sv.contentSize = CGSizeMake(300, 300);
/// 只允许左右滚动

// sv.contentSize = CGSizeMake(300, 0);

// 只允许上下ai

// sv.contentSize = CGSizeMake(0, 300);

endif

if 1


// 相册练习
// 1. 创建相册
//  self.view.frame  和屏幕一样大
UIScrollView *photos = [[UIScrollView alloc]initWithFrame:self.view.frame];
photos.backgroundColor = [UIColor yellowColor];
[self.view addSubview:photos];
[photos release];
// 设置内容大小
photos.contentSize = CGSizeMake(self.view.frame.size.width * 6, 0);
// 3. 处理图片数组
NSMutableArray *photoArr = [NSMutableArray array];
for (NSInteger i = 1; i <= 6 ; i++) {
    // 图片名
    NSString *name = [NSString stringWithFormat:@"S%ld", i];
    // 图片路径
    NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"jpg"];
    // 图片对象
    UIImage *img = [UIImage imageWithContentsOfFile:path];
    // 添加数组
    [photoArr addObject:img];

if 0

    // 4.方式一:不使用数组
    // 创建相框
    UIImageView  *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(375 * (i - 1), 0, 375, 667)];
    imgView.image = img;
    [photos addSubview:imgView];
    [imgView release];

endif

}

// 4. 方式二:使用数组
for (NSInteger i = 0; i < photoArr.count; i++) {
    UIImageView  *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(375 * i, 0, 375, 667)];
    imgView.image = photoArr[i];
    [photos addSubview:imgView];
    [imgView release];
}

// 属性设置
/*******<  contentOffset 偏移量 >*****/
// 将设置的点移动到frame的原点
// 滚动时偏移量一定会改变  并且偏移量改变一定会滚动
photos.contentOffset = CGPointMake(0, 0);
//****** < contentInset 边界预留   > ******/
// 在滚动视图的内容之外添加预留区域(上左下右)
photos.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
//*****< pafeingenable整页翻动效果>**/
photos.pagingEnabled = YES;
//*****<  bouces 边缘效果>*****/默认YES
photos.bounces = YES;
// /.水平/垂直 边缘效果
// 当前允许在某一方向小于frame时 有边缘效果
photos.alwaysBounceHorizontal = YES;
photos.alwaysBounceVertical = NO;
/*****   <scrollsToTop  滚到头 >****/
photos.scrollsToTop = YES;
/**********< scrollEnabled  空否滚动>********/
photos.scrollEnabled = YES;// 默认允许
// 滚动条 显示/隐藏
photos.showsHorizontalScrollIndicator = NO;// 水平
photos.showsVerticalScrollIndicator = NO;//垂直
// 设置代理人
photos.delegate = self;
// 缩放
// 设置缩放比例
// 最小比例
photos.minimumZoomScale = 0.5;
// 最大比例
photos.maximumZoomScale = 2;
// 设置当前比例
photos.zoomScale = 1;
photos.tag = 2000;

endif

if 1

/******** PageControl 和 ScrollView 配合使用***********/

UIPageControl *page = [[UIPageControl alloc]    initWithFrame:CGRectMake(0, 600, 150, 30)];
//page.backgroundColor = [UIColor blackColor];
page.center = CGPointMake(self.view.center.x, page.center.y);
page.numberOfPages = 6;
page.tag = 1000;
[self.view addSubview:page];
// page.enabled = YES; 是否点击小图标变化
[page release];
// 添加事件
[page addTarget:self action:@selector(pageAction:) forControlEvents:UIControlEventValueChanged];

endif

}
// 页面控制器触发方法

  • (void)pageAction:(UIPageControl *)page
    {

    // 获取滚动视图
    UIScrollView *sv = (UIScrollView * )[self.view viewWithTag:2000];
    // 设置偏移量

    // sv.contentOffset = CGPointMake(page.currentPage * sv.frame.size.width, 0);// 没有动画效果

    [sv setContentOffset:CGPointMake(page.currentPage * sv.frame.size.width, 0 )animated:YES];// 有动画效果
    

    }

if 0

// 实现缩放响应方法
// 当缩放被触发时 哪个视图跟随变化

  • (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView
    {
    // 让滚动视图上加载的第一张图片跟随缩放
    return scrollView.subviews.firstObject;
    }

endif

pragma mark - scrollView 滚动协议方法

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

// 只有视图滚动 就会一直触发该方法
// 任何偏移量的改变 都会触发该方法
NSLog(@"偏移量: %@", NSStringFromCGPoint(scrollView.contentOffset));
NSLog(@"滚啊滚");

}
// 一次完整的滚动非两个阶段: 拖追/减速

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

    // 滚动开始执行的第一个方法
    // 滚动开始标志
    NSLog(@"将要开始");

    }

  • (void)scrollViewWillEndDragging:(UIScrollView )scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint )targetContentOffset
    {

    NSLog(@"将要结束");

    }

  • (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {

    NSLog(@"已经结束");

    }

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

    NSLog(@"将要开始减速");

    }

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

    // 滚动时 触发的最后一个方法
    // 滚动结束标识
    NSLog(@"已经结束减速");
    
    
    // 翻页结束
    // 获取page
    UIPageControl *page = (UIPageControl * )[self.view viewWithTag:1000];
    // 设置页数
    // 公式: 页数= x偏移量 / 单页宽度
    page.currentPage = scrollView.contentOffset.x / scrollView.frame.size.width;
    

    }

  • (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

    }

/*

pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

  • (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

    }

*/

@end

标签: ios, ios开发, ui

添加新评论