您的位置:首页 > 产品设计 > UI/UE

UIScrollView(二)

2016-01-18 17:45 501 查看
先做个小补充,上一篇貌似忘记介绍UIScrollView的缩放功能了,这里正好要给大家介绍使用UIScrollView实现图片浏览,会涉及到缩放的操作,所以就在这里介绍一下吧,此外给图片添加单击双击和长按手势也有一些小问题需要注意,就是单击和双击手势冲突问题,请戳这里:OC同时添加单击和双击手势冲突

先说先缩放吧:

- (void)viewDidLoad {

[super viewDidLoad];

//创建滚动视图

UIScrollView *scrollView = [[[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds]autorelease];

scrollView.contentSize = CGSizeMake(1000, 1000);

//缩小的最小比例

scrollView.minimumZoomScale = 0.5;

//放大的最大比例

scrollView.maximumZoomScale = 2;

//设置变化比例

//scrollView.zoomScale = 1;

//设置delegate

scrollView.delegate = self;

//添加图片到scrollView上

UIImageView *imgView = [[[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds]autorelease];

imgView.image = [UIImage imageNamed:@"2.png"];

imgView.userInteractionEnabled = YES;

[scrollView addSubview:imgView];

[self.view addSubview:scrollView];

}

//设定要缩放的视图

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{

return [scrollView.subviews objectAtIndex:0];

}

//缩放时执行的方法

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

UIImageView *imgView = (UIImageView *)[scrollView.subviews objectAtIndex:0];

if (scrollView.zoomScale < 1) {

imgView.center = self.view.center;

}else{

//放大后保证边缘无错误

CGRect rect = imgView.frame;

rect.origin = CGPointMake(0, 0);

imgView.frame = rect;

}

}



无限轮播在这里(到最后一张图片继续滑动到第一张):多图片无缝滚动组件封装与使用

下面是UIScrollView复用实现图片浏览(到最后一张图片继续滑动不到第一张):

#import "ViewController.h"

static int i;

@interface ViewController ()<UIScrollViewDelegate>

@property (nonatomic, strong) UIScrollView *scrollView;

@property (nonatomic, strong) NSMutableArray *imagesArray;

@property (nonatomic, strong) UIImageView *currentImageView;

@property (nonatomic, strong) UIImageView *nextImageView;

@property (nonatomic, strong) UIImageView *preImageView;

@property (nonatomic, strong) UIScrollView *currentScrollView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor blackColor];

_imagesArray = [[NSMutableArray alloc]init];

for (int i = 1; i <= 5; i++) {

NSString *str = [NSString stringWithFormat:@"%d", i];

UIImage *image = [UIImage imageNamed:str];

[_imagesArray addObject:image];

}

CGFloat width = self.view.frame.size.width;

CGFloat height = self.view.frame.size.height;

self.scrollView = [[UIScrollView alloc]init];

self.scrollView.frame = CGRectMake(0, 0, width, height);

[self.view addSubview:_scrollView];

if (_imagesArray.count > 1) {

[self.scrollView setContentSize:CGSizeMake(width * 2, height)];

}else{

[self.scrollView setContentSize:CGSizeMake(width, height)];

}

self.scrollView.showsHorizontalScrollIndicator = NO;

self.scrollView.pagingEnabled = YES;

self.scrollView.delegate = self;

self.scrollView.contentOffset = CGPointMake(0, 0);

self.scrollView.bounces = NO;

self.currentScrollView = [[UIScrollView alloc]init];

self.currentScrollView.frame = CGRectMake(0, 0, width, height);

[self.scrollView addSubview:_currentScrollView];

[self.currentScrollView setContentSize:CGSizeMake(width, height)];

self.currentScrollView.showsHorizontalScrollIndicator = NO;

self.currentScrollView.showsVerticalScrollIndicator = NO;

self.currentScrollView.bouncesZoom = YES;

self.currentScrollView.backgroundColor = [UIColor clearColor];

self.currentScrollView.delegate = self;

self.currentScrollView.minimumZoomScale = 0.8;

self.currentScrollView.maximumZoomScale = 2;

self.currentScrollView.scrollEnabled = YES;

self.currentScrollView.contentOffset = CGPointMake(0, 0);

self.currentScrollView.bounces = NO;

self.currentImageView = [[UIImageView alloc]init];

self.currentImageView.image = [_imagesArray firstObject];

self.currentImageView.frame = CGRectMake(0, 0, width, height);

[_currentScrollView addSubview:_currentImageView];

[self.scrollView addSubview:_currentScrollView];

self.currentImageView.contentMode = UIViewContentModeScaleAspectFit;

if (_imagesArray.count > 1) {

self.nextImageView = [[UIImageView alloc]init];

self.nextImageView.image = _imagesArray[1];

self.nextImageView.frame = CGRectMake(width, 0, width, height);

[self.scrollView addSubview:_nextImageView];

self.nextImageView.contentMode = UIViewContentModeScaleAspectFit;

self.preImageView = [[UIImageView alloc]init];

self.preImageView.frame = CGRectMake(0, 0, 0, 0);

[self.scrollView addSubview:_preImageView];

self.preImageView.image = [_imagesArray firstObject];

self.preImageView.contentMode =UIViewContentModeScaleAspectFit;

}

}

- (void)reload{

CGFloat width = self.view.frame.size.width;

CGFloat height = self.view.frame.size.height;

if (i == 0) {

[self.scrollView setContentSize:CGSizeMake(width * 2, height)];

self.scrollView.contentOffset = CGPointMake(0, 0);

self.currentScrollView.frame = CGRectMake(0, 0, width, height);

self.nextImageView.frame = CGRectMake(width, 0, width, height);

self.preImageView.frame = CGRectMake(0, 0, 0, 0);

}else if (i == _imagesArray.count - 1){

[self.scrollView setContentSize:CGSizeMake(width * 2, height)];

self.scrollView.contentOffset = CGPointMake(width, 0);

self.currentScrollView.frame = CGRectMake(width, 0, width, height);

self.nextImageView.frame = CGRectMake(width, 0, 0, 0);

self.preImageView.frame = CGRectMake(0, 0, width, height);

}else{

[self.scrollView setContentSize:CGSizeMake(width * 3, height)];

self.scrollView.contentOffset = CGPointMake(width, 0);

self.currentScrollView.frame = CGRectMake(width, 0, width, height);

self.nextImageView.frame = CGRectMake(width*2, 0, width, height);

self.preImageView.frame = CGRectMake(0, 0, width, height);

}

}

#pragma mark - scroll delegate

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

int page = i;

float offset = self.scrollView.contentOffset.x;

if (self.nextImageView.image == nil || self.preImageView.image == nil) {

//下一张

if (i <= _imagesArray.count - 1) {

_nextImageView.image = [self getNextImageByIndex:i];

}

//上一张

if (i >= 0) {

_preImageView.image = [self getPreImageIndex:i];

}

}

if(offset == 0){

_currentImageView.image = _preImageView.image;

_preImageView.image = nil;

i = i - 1;

if (i <= 0) {

i = 0;

}

}

if ((offset == scrollView.bounds.size.width * 2) || (offset == scrollView.bounds.size.width && i == 0)) {

_currentImageView.image = _nextImageView.image;

_nextImageView.image = nil;

i = i + 1;

if (i >= _imagesArray.count) {

i = (int)_imagesArray.count;

}

}

if (i == 0) {

_currentImageView.image = [_imagesArray firstObject];

}

if (i != page) {

[self reload];

}

}

- (UIImage *)getNextImageByIndex:(NSInteger)index{

if (index < _imagesArray.count - 1) {

UIImage *image = _imagesArray[index+1];

return image;

}

return nil;

}

- (UIImage *)getPreImageIndex:(NSInteger)index{

if (index > 0) {

UIImage *image = _imagesArray[index-1];

return image;

}

return nil;

}

- (UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView

{

return _currentImageView;

}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

{

CGSize boundsSize = scrollView.bounds.size;

CGRect imgFrame = _currentImageView.frame;

CGSize contentSize = scrollView.contentSize;

CGPoint centerPoint = CGPointMake(contentSize.width/2, contentSize.height/2);

if (imgFrame.size.width <= boundsSize.width)

{

centerPoint.x = boundsSize.width/2;

}

if (imgFrame.size.height <= boundsSize.height)

{

centerPoint.y = boundsSize.height/2;

}

_currentImageView.center = centerPoint;

}

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

_currentScrollView.zoomScale = 1.0;

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: