- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat imageH = self.imageView.frame.size.height;
CGFloat offsetY = scrollView.contentOffset.y;
// 该判断是实现scrollView内部的子控件悬停效果
if (offsetY >= imageH) {
// 将红色控件添加到控制器的view中,设置Y值为0
CGRect redF = self.redView.frame;
redF.origin.y = 0;
self.redView.frame = redF;
[self.view addSubview:self.redView];
}else{
// 将红色控件添加到scrollView中,设置Y值为图片的高度
CGRect redF = self.redView.frame;
redF.origin.y = 140;
self.redView.frame = redF;
[self.scrollView addSubview:self.redView];
}
// 实现下拉放大顶部图片效果
CGFloat scale = 1 - (offsetY / 70);
scale = (scale >= 1) ? scale : 1;
self.imageView.transform = CGAffineTransformMakeScale(scale, scale);
}
//宏定义屏幕的宽和高
#define ScreenWight [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
@interface ViewController ()<UIScrollViewDelegate>//签滚动视图协议,为了实现协议方法
/** 滚动视图属性 */
@property(nonatomic, retain)UIScrollView *scrollView;
/** 分页控件属性 */
@property(nonatomic, retain)UIPageControl *pageControl;
/** 标记属性 */
@property(nonatomic, assign)BOOL flag;
@end
- (void)loadView
{
[super loadView];
self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
//设置容量
self.scrollView.contentSize = CGSizeMake(8 * ScreenWight, ScreenHeight);
//添加滚动视图
[self.view addSubview:_scrollView];
//设置整页翻动
self.scrollView.pagingEnabled = YES;
//设置偏移量
self.scrollView.contentOffset = CGPointMake(ScreenWight, 0);
//设置代理人
self.scrollView.delegate = self;
for (NSInteger i = 1; i < 7; i++) {
//创建小的滚动视图
/**
为什么要创建小的滚动视图?
因为在进行缩放之后发现,之前的滚动效果发生了变化,
原因在于当我们进行缩放的时候,协议方法不但会改变视图的尺存,同样也可以改变scrollView的contenSize属性。
解决方法:大的scrollView上先铺设小的scrollView ,然后把imageView放到小的scrollView上
大的scrollView主要承担水平或垂直滚动,小的scrollView承担缩放的功能,
并且每个都设置好缩放比例,这样再进行缩放,只会改变小scrollView的contenSize, 不会改变scrollView的contentSize。
*/
UIScrollView *tempScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(ScreenWight * i, 0, ScreenWight, ScreenHeight)];
tempScrollView.contentSize = CGSizeMake(ScreenWight, ScreenHeight);
//隐藏底部和右侧滚动条
tempScrollView.showsVerticalScrollIndicator = NO;
tempScrollView.showsHorizontalScrollIndicator = NO;
//设置缩放的比例
tempScrollView.minimumZoomScale = 0.5f;
tempScrollView.maximumZoomScale = 3.0f;
//小滚动视图设置代理,为的是实现缩放的代理方法
tempScrollView.delegate = self;
[self.scrollView addSubview:tempScrollView];
//循环往小滚动视图添加图片
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ScreenWight, ScreenHeight)];
NSString *imageName = [NSString stringWithFormat:@"%ld.JPG", i];
imageView.image = [UIImage imageNamed:imageName];
[tempScrollView addSubview:imageView];
//设置轻拍手势
//首先打开imageView的用户交互,默认是关闭
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapImageView:)];
tapGesture.numberOfTapsRequired = 2;
[imageView addGestureRecognizer:tapGesture];
}
//在最前面加上最后一张图,障眼法,给人一种感觉从第一页循环