程序员iOS开发

滚动视图及缩放

2015-12-03  本文已影响269人  ThEAll

import "AppDelegate.h"

import "RootViewController.h"

import "ZoomViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


import "RootViewController.h"

@interface RootViewController ()<UIScrollViewDelegate>

@end

@implementation RootViewController

}

//pageControl的回调方法
-(void)pageAction:(UIPageControl)sender{
// 根据当前的页数,使得scrollView也滑动到对应的子视图 通过设置scrollView的contentOffset来实现(改变contentOffset实际上就是改变scrollView的bounds)
// 得到当前的页数
int page = (int)sender.currentPage;
// 根据当前页数来计算偏移量
// 得到scrollView
UIScrollView scrollView = (UIScrollView)[self.view viewWithTag:1000];
// 设置scrollView的偏移量 当前的页数乘以屏幕宽度
[scrollView setContentOffset:CGPointMake(page
CGRectGetWidth(self.view.frame), 0) animated:YES];
}

pragma mark --- 滚动视图的代理方法

// 开始拖拽(手指触碰到屏幕,并且移动)
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"-------%s",func);
}

// 已经开始滚动(只要scrollView是滚动状态就会调用次方法)
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
// 滚动视图上面的子视图可以移动,不是子视图改变自身的frame值,而是通过更改滚动视图(也就是子视图的父视图)的bounds的origin(也就是x,y)来更改子视图在父视图(滚动视图)上显示的位置
// scrollView的偏移量
CGPoint offSet = scrollView.contentOffset;
NSLog(@"_____%f",offSet.x);
// 得到scrollView的bounds的x点
float x = scrollView.bounds.origin.x;
NSLog(@"bounds********%f",x);
NSLog(@"--------%s",func);
}

// 停止拖拽 当手指(触摸对象)离开,正在滚动的视图减速
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"_____%s",func);
}

// 视图真正静止(视图不动了)
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
// 根据scrollView的偏移量来计算当前的页数
int page = (int)scrollView.contentOffset.x/CGRectGetWidth(self.view.frame);
// 得到pageControl
UIPageControl pageControl = (UIPageControl)[self.view viewWithTag:1001];
// 设置当前的页数
pageControl.currentPage = page;

NSLog(@"%s",__func__);

}

/*

pragma mark - Navigation

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

@end

import "ZoomViewController.h"

@interface ZoomViewController ()<UIScrollViewDelegate>

@end

@implementation ZoomViewController

}

pragma mark --- 滚动视图与缩放有关的代理方法

// 指定scrollView的某一个子视图为可缩放视图,前提条件是此视图已经添加到scrollView上面
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
UIImageView imageView = (UIImageView)[scrollView viewWithTag:1000];
return imageView;
}

// 开始缩放 第二个参数view:是指我们将要缩放的视图(这里就是imageView)
-(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
NSLog(@"%@",view);
}

// 正在缩放 只要正在缩放就会执行此方法,所以此方法在放缩过程中会多次调用
-(void)scrollViewDidZoom:(UIScrollView *)scrollView{

//  在缩放过程中,为了使得该子视图一直在屏幕中间位置,所以我们需要在它缩放过程中一直调整他的center
//  得到scrollView的子视图
UIImageView *imageView = (UIImageView*)[scrollView viewWithTag:1000];
//  打印imageView的frame。分析为什么它的位置会改变
NSLog(@"frame___%@",NSStringFromCGRect(imageView.frame));

//  设置imageView的center,使得它的位置一直在屏幕中间
imageView.center =self.view.center;

//  打印contentSize  分析为什么缩放之后会滑动
NSLog(@"contentSize------%@",NSStringFromCGSize(scrollView.contentSize));

}

// 缩放结束
// 第二个参数 : 当前正在缩放的视图
// 第三个参数 : 当前正在缩放视图的缩放比例
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
// 缩放完成之后恢复原大小,这里使用的是2D方式变换函数中与捏合有关的函数
// view.transform = CGAffineTransformMakeScale(1, 1);
}

/*

pragma mark - Navigation

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

上一篇下一篇

猜你喜欢

热点阅读