猫猫学IOS(九)UI之UIScrollView代理触摸实现_图片缩放
猫猫分享,必须精品
素材代码地址:http://blog.csdn.net/u013357243/article/details/44619193
原文地址:http://blog.csdn.net/u013357243?viewmode=contents
先看效果
代码
//
// NYViewController.m
// 05-放大缩小图片UIScrollView
//
// Created by apple on 15-3-25.
// Copyright (c) 2015年 znycat. All rights reserved.
//
#import "NYViewController.h"
@interface NYViewController ()
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIImageView *imageView;
//假设图片是从网络上获取的
@property (nonatomic, strong) UIImage *image;
@end
@implementation NYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 设置图像
self.image = [UIImage imageNamed:@"minion"];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.center = self.view.center;//将按钮放到view中间
[self.view addSubview:btn];
[btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
}
/**
放大缩小
1> 设置代理
2> 指定最大/最小的缩放比例
*/
// 图像的setter
- (void)setImage:(UIImage *)image
{
_image = image;
// 设置图像视图的内容
self.imageView.image = image;
// 让图像视图根据图像自动调整大小
[self.imageView sizeToFit];
// 告诉scrollView内部内容的实际大小
self.scrollView.contentSize = image.size;
}
/**
在getter方法中
* 如果是属性自身的,使用_成员变量
* 如果是其他属性,使用self. getter方法,从而可以保证如果该对象没有被实例化,能够及时的被创建并加载
*/
- (UIImageView *)imageView
{
if (_imageView == nil) {
_imageView = [[UIImageView alloc] init];
[self.scrollView addSubview:_imageView];
}
return _imageView;
}
- (UIScrollView *)scrollView
{
if (_scrollView == nil) {
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
// 设置属性
// 设置边距
_scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
// 不显示水平滚动标示
_scrollView.showsHorizontalScrollIndicator = NO;
// 不显示垂直滚动标示
_scrollView.showsVerticalScrollIndicator = NO;
// *** 偏移位置
_scrollView.contentOffset = CGPointMake(0, 0);
// 取消弹簧效果,内容固定,不希望出现弹簧效果时
// 不要跟bounds属性搞混了
_scrollView.bounces = NO;
// 设置代理
_scrollView.delegate = self;
// 设置最大/最小缩放比例
_scrollView.maximumZoomScale = 2.0;
_scrollView.minimumZoomScale = 0.2;
[self.view addSubview:_scrollView];
}
return _scrollView;
}
//移动scrollView的位置
- (void)click
{
// 移动大图的偏移位置
CGPoint offset = self.scrollView.contentOffset;
offset.x += 20;
offset.y += 20;
// 注意:设置contentOffset会忽略contentSize
self.scrollView.contentOffset = offset;
}
#pragma mark - UIScrollView的代理方法
/**
1> 设置了代理
2> 指定了最大、最小的缩放比例
表示ScrollView是可以缩放的
代理方法的"返回值"实际上就是控制器告诉滚动视图,要缩放的是UIImageView
*/
// 告诉ScrollView要缩放的视图是谁,具体的缩放实现,是由ScrollView来完成的
// 1> scrollView要知道缩放谁
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.imageView;
}
// 2> 滚动视图即将开始缩放,通常不需要写
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
NSLog(@"%s", __func__);
}
// 3> 正在缩放,通常也不需要实现
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
// NSLog(@"%s", __func__);
NSLog(@"%@", NSStringFromCGAffineTransform(self.imageView.transform));
}
// 4> 完成缩放,通常也不需要实现
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
NSLog(@"%s", __func__);
}
@end
图片完成触摸缩放功能
设置代理
_scrollView.delegate = self;
设置最大/最小缩放比例
_scrollView.maximumZoomScale = 2.0;
_scrollView.minimumZoomScale = 0.2;
1> 设置了代理
2> 指定了最大、最小的缩放比例表示ScrollView是可以缩放的
代理方法的”返回值”实际上就是控制器告诉滚动视图,要缩放的是UIImageView
告诉ScrollView要缩放的视图是谁,具体的缩放实现,是由ScrollView来完成的
scrollView要知道缩放谁
- (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView
{
return self.imageView;
}
好了 就着几行就是手指触摸缩放的实现代码了
ps:新建iOS交流学习群:304570962
ps:猫猫的文章竟然被好多地方转载了,受宠若惊啊,不过转的时候请转的全一点,别丢下素材什么的,不标注转载也没事,大家一起努力学习猫猫就很高兴了,如果需要学习资料视频素材等等的可以加猫猫QQ:1764541256 或则微信znycat
让我们一起努力学习吧。
目前将这个游戏的功能都实现了,虽然部分代码抽取的不是那么完美
原文:http://blog.csdn.net/u013357243?viewmode=contents