如何缩放填充屏幕的UIImageView

时间:2012-11-09 15:27:18

标签: ios uiscrollview uiimageview uiimage zooming

我只是想缩放我在UIScrollView上的UIImageView上设置的照片。也许这是因为图像与屏幕大小相同,但在下面的代码中,viewForZoomingInScrollViewscrollViewDidZoom都没有被调用。请帮我解决这个问题,这样我就可以放大图像了。感谢:

接口:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIScrollViewDelegate>

@property (strong, nonatomic) UIScrollView* scrollView;
@property (strong, nonatomic) UIImageView *imageHolder;

@end

实现:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

// Tell the scroll view the size of the contents
self.scrollView.contentSize = self.view.frame.size;

self.scrollView.delegate = self;
self.scrollView.scrollEnabled = YES;

_imageHolder = [[UIImageView alloc]initWithFrame:self.view.frame];
_scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];

[self.imageHolder setImage:[UIImage imageNamed:@"P1020486.png"]];

[self.scrollView addSubview:_imageHolder];
[self.view addSubview:self.scrollView];

//Keep the proportion and fit the screen, not filling it --> when we rotate, resizes image correctly:
_imageHolder.contentMode = UIViewContentModeScaleAspectFit;
}

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

// Set up the minimum & maximum zoom scales
CGRect scrollViewFrame = self.scrollView.frame;
CGFloat scaleWidth = scrollViewFrame.size.width / self.scrollView.contentSize.width;
CGFloat scaleHeight = scrollViewFrame.size.height / self.scrollView.contentSize.height;
CGFloat minScale = MIN(scaleWidth, scaleHeight);
//
self.scrollView.minimumZoomScale = minScale;
self.scrollView.maximumZoomScale = 1.0f;

[self centerScrollViewContents];
}

- (void)centerScrollViewContents {
CGSize boundsSize = self.scrollView.bounds.size;
CGRect contentsFrame = self.imageHolder.frame;

if (contentsFrame.size.width < boundsSize.width) {
    contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;
} else {
    contentsFrame.origin.x = 0.0f;
}

if (contentsFrame.size.height < boundsSize.height) {
    contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
    contentsFrame.origin.y = 0.0f;
}

self.imageHolder.frame = contentsFrame;
}

#pragma mark - UIScrollViewDelegate

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the view that we want to zoom
return self.imageHolder;
//return self.scrollViewBar;
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
// The scroll view has zoomed, so we need to re-center the contents
[self centerScrollViewContents];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

2 个答案:

答案 0 :(得分:3)

我没时间测试它,但我认为这个问题就在这一行:

self.scrollView.maximumZoomScale = 1.0f;

尝试放置2.0f或更大的东西。

答案 1 :(得分:2)

从快速查看代码开始,看起来你在初始化之前就在scrollView上设置了属性:

self.scrollView.contentSize = self.view.frame.size;

self.scrollView.delegate = self;

self.scrollView.scrollEnabled = YES;

_scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];

如果您颠倒订单,它应该有效。

相关问题