
正文
【原创】iOS图片预览(支持缩放和移动)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1.传入图片
PreViewController.h:
#import <UIKit/UIKit.h> @interface PreViewController : UIViewController @property (nonatomic,strong) UIImage *preImage; @end
2.图片加载
PreViewController.m:
#import "PreViewController.h" @interface PreViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *preView;//滚动视图 @property (nonatomic,assign) CGFloat visibleWidth;//有效显示宽度
@property (nonatomic,assign) CGFloat visibleHeight;//有效显示高度
@property (nonatomic,assign) CGFloat originalWidth;//图片居中显示原始宽度
@property (nonatomic,assign) CGFloat originalHeight;//图片居中显示原始高度 @property (nonatomic,strong) UIImageView *photoView;//图片视图 @end @implementation PreViewController - (void)viewDidLoad {
[super viewDidLoad]; [self loadPhoto];
} - (void)loadPhoto
{
self.originalWidth = ;
self.originalHeight = ;
self.visibleWidth = CGRectGetWidth([UIScreen mainScreen].bounds);
self.visibleHeight = CGRectGetHeight([UIScreen mainScreen].bounds) - [[UIApplication sharedApplication] statusBarFrame].size.height - self.navigationController.navigationBar.frame.size.height;//除去状态栏和导航栏的有效显示高度
CGFloat imageAspectRatio = self.preImage.size.width / self.preImage.size.height;//图片原始比例
CGFloat viewAspectRatio = self.visibleWidth / self.visibleHeight;//有效显示区域比例
if (imageAspectRatio > viewAspectRatio)
{
self.originalWidth = self.visibleWidth;
self.originalHeight = self.originalWidth / imageAspectRatio;
}
else
{
self.originalHeight = self.visibleHeight;
self.originalWidth = self.originalHeight * imageAspectRatio;
}
//居中
CGFloat originalX = (self.visibleWidth - self.originalWidth) / 2.0;
CGFloat originalY = (self.visibleHeight - self.originalHeight) / 2.0; self.photoView = [[UIImageView alloc] initWithImage:self.preImage];
self.photoView.frame = CGRectMake(originalX, originalY, self.originalWidth, self.originalHeight);//图片视图在滚动视图即contentView内的位置大小 //self.preView.contentSize = self.preImage.size;//设置为原始图片大小(可乘以倍数)
//缩放设置
//self.preView.zoomScale = 1.0;
//self.preView.minimumZoomScale = 1.0;
//self.preView.maximumZoomScale = self.preImage.size.width / self.originalWidth;
//优化
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #703daa}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #539aa4}
span.s1 {font-variant-ligatures: no-common-ligatures; color: #703daa}
span.s2 {font-variant-ligatures: no-common-ligatures}
span.s3 {font-variant-ligatures: no-common-ligatures; color: #78492a}
span.s4 {font-variant-ligatures: no-common-ligatures; color: #c42275}
span.s5 {font-variant-ligatures: no-common-ligatures; color: #539aa4}
span.s6 {font-variant-ligatures: no-common-ligatures; color: #3e1e81}
span.s7 {font-variant-ligatures: no-common-ligatures; color: #0435ff}
span.s8 {font-variant-ligatures: no-common-ligatures; color: #000000}
CGFloat contentWidth = MAX(self.preImage.size.width, self.visibleWidth);
CGFloat contentHeight = MAX(self.preImage.size.height, self.visibleHeight);
self.preView.contentSize = CGSizeMake(contentWidth, contentHeight);
self.preView.zoomScale = 1.0;
self.preView.minimumZoomScale = 1.0;
self.preView.maximumZoomScale = MAX(1.0, (self.preImage.size.width / self.originalWidth));
[self.preView addSubview:self.photoView];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.photoView;//返回缩放视图
} //根据缩放调整居中(当图片缩放到有效显示区域外则直接CGPointZero)
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
{
CGRect rect = self.photoView.frame;
CGFloat scaleWidth = MIN(self.visibleWidth, self.originalWidth * scale);
CGFloat widthDistance = self.visibleWidth - scaleWidth;
CGFloat scaleHeight = MIN(self.visibleHeight, self.originalHeight * scale);
CGFloat heightDistance = self.visibleHeight - scaleHeight;
rect.origin.x = widthDistance / 2.0;
rect.origin.y = heightDistance / 2.0;
[UIView animateWithDuration:0.25 animations:^{ self.photoView.frame = rect; }];
} @end
缩放过程中不会调整图片位置移动,只有在结束缩放后才动画调整居中显示,图片铺满有效显示区域后不存在居中问题,只要能显示全图即可。
此方法谈不上全面完善,只是目前看起来还不错,希望大家有好的方法可以分享~
转载请注明出处: http://www.cnblogs.com/HellerForever/p/6903534.html






