-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
实现放在UIScrollView的子控件放大缩小效果,使用SDWebImage加载网络图片。
附上代码
.h
#import <UIKit/UIKit.h>
@interface ShowImageViewViewController : UIViewController
@property(strong,nonatomic)NSArray * imageArray;
//- (CGRect)zoomRectForScale:(float)scale inView:(UIScrollView*)scrollView withCenter:(CGPoint)center;
@end
.m
#import "ShowImageViewVieController.h"
#import "UIImageView+WebCache.h"
@interface ShowImageViewViewController ()<UIScrollViewDelegate>{
CGFloat offset;
UIScrollView * singleImageScrollView;
}
@property(nonatomic,strong)UIScrollView * imageScrollView;
@end
@implementation ShowImageViewVieController
- (void)viewDidLoad {
[super viewDidLoad];
[self createImageView];
[self createImageScrollView];
}
-(void)createImageScrollView
{
self.view.backgroundColor = [UIColor blackColor];
offset = 0.0;
self.imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
self.imageScrollView.backgroundColor = [UIColor clearColor];
self.imageScrollView.scrollEnabled = YES; //可以滑动
self.imageScrollView.pagingEnabled = YES; //分页滑动
self.imageScrollView.delegate = self; //代理
self.imageScrollView.showsVerticalScrollIndicator = NO; //隐藏竖向滑动条
self.imageScrollView.showsHorizontalScrollIndicator = NO; //隐藏横向滑动条
self.imageScrollView.contentSize = CGSizeMake(self.view.frame.size.width*_imageArray.count, self.view.frame.size.height);
for (int i = 0; i<_imageArray.count; i++){
singleImageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(self.view.frame.size.width*i, 0, self.view.frame.size.width, self.view.frame.size.height)];
singleImageScrollView.showsVerticalScrollIndicator = NO; //隐藏竖向滑动条
singleImageScrollView.showsHorizontalScrollIndicator = NO; //隐藏横向滑动条
singleImageScrollView.center = CGPointMake(self.view.frame.size.width/2+self.view.frame.size.width*i, self.view.frame.size.height/2);
singleImageScrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
singleImageScrollView.delegate = self;
singleImageScrollView.minimumZoomScale = 1.0;
singleImageScrollView.maximumZoomScale = 3.0;
[singleImageScrollView setZoomScale:1.0];
NSString * imageStr = [_imageArray objectAtIndex:i];
NSString * str = [imageStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *imageUrl = [NSURL URLWithString:str];
UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height)];
//按照一定比例缩放图片
//使用UIViewContentModeScaleAspectFit才可以正常显示,否则总是铺满全屏显示的
[imageView setContentMode:UIViewContentModeScaleAspectFit];
[imageView sd_setImageWithURL:imageUrl placeholderImage:[UIImage imageNamed:@"图片加载"]];
imageView.userInteractionEnabled = YES;
[singleImageScrollView addSubview:imageView];
[self.imageScrollView addSubview:singleImageScrollView];
}
[self.view addSubview:self.imageScrollView];
}
#pragma mark - ScrollView delegate
//实现放大缩小
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
for (UIView *v in scrollView.subviews){
return v;
}
return nil;
}
//恢复原来显示的比例
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (scrollView == self.imageScrollView){
CGFloat x = scrollView.contentOffset.x;
if (x==offset){
}
else {
offset = x;
for (UIScrollView *scroll in scrollView.subviews){
if ([scroll isKindOfClass:[UIScrollView class]]){
[scroll setZoomScale:1.0];
}
}
}
}
}
@end