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
先说先缩放吧:
- (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
相关文章推荐
- Android Studio一直处于building *** gradle project info的解决办法
- (Question)CSS中position的绝对定位问题
- iOS-UIDynamic(简单介绍)
- 设置UIButton的image title 位置
- UIScrollView(一)
- RTUILabel+正则表达式
- UIScrollView 边界问题处理
- UIBezierPath精讲
- Divide and conquer:K Best(POJ 3111)
- Android Bluetooth蓝牙开发:Bluetooth蓝牙设备配对Paired Bluetooth Devices(2)
- iOS个人整理11-UIControl与子类:UIScrollView滚动视图
- IOS开发UI-------视图的生命周期
- JSPatch学习系列-UI基础
- UIAlertController使用
- EasyUI-Combox
- 如何做优化,UITabelView才能更加顺滑
- 设置列表(uitableview)顶端间隙
- Android 5.0 SystemUI
- easyui datagrid 的 tip实现
- UIScrollView直接在StoryBoard中拖控件