UIScrollview中的UIImageView太大了

时间:2014-07-15 22:09:24

标签: ios objective-c uiscrollview uiimageview uiimage

我想在UIImageView内使用UIScrollview显示图片。在保持纵横比的同时,图像需要适合屏幕。

这一切都有效,除了当我先缩放时,我可以在图像下方滚动。面积高度约为64。

这是滚动后的样子(白色是UIImageView的背景颜色,红色是UIScrollView的背景颜色): White is the background color of the UIImageView and red is the background color of the UIScrollView

这是我的ImageViewController中的代码:

#import "ImageViewController.h"

@interface ImageViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIImage *image;
@end

@implementation ImageViewController

- (void)viewDidLoad
{
    NSLog(@"viewDidLoad");
    [super viewDidLoad];

    _scrollView.minimumZoomScale = 1.0  ;
    _scrollView.maximumZoomScale = _imageView.image.size.width / _scrollView.frame.size.width;
    _scrollView.zoomScale = 1.0;
    _scrollView.backgroundColor = [UIColor redColor];
    _scrollView.delegate = self;
    _imageView.backgroundColor = [UIColor whiteColor];

    [_scrollView addSubview:_imageView];

}

- (void)viewDidLayoutSubviews
{
    self.imageView.frame = self.scrollView.bounds;
}


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

    [self.imageView setContentMode:UIViewContentModeScaleAspectFit];
}

- (UIImageView *)imageView
{
    if (!_imageView) _imageView = [[UIImageView alloc] init];
    return _imageView;
}

- (UIImage *)image
{
    NSLog(@"image");
    return self.imageView.image;
}

- (void)setImage:(UIImage *)image
{
    NSLog(@"setImage");
    self.imageView.image = image;
}

#pragma mark - UIScrollViewDelegate

// mandatory zooming method in UIScrollViewDelegate protocol

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}

-(void)setImageURL:(NSURL *)imageURL
{
    NSLog(@"setImageURL");
    _imageURL = imageURL;
    self.image = [UIImage imageWithContentsOfFile:[imageURL path]];
}

@end

这是我的UIScrollView的属性:

Properties of my UIScrollView

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我得到了它的工作。这是我的代码:

#import "ImageViewController.h"

@interface ImageViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIImage *image;
@end

@implementation ImageViewController

- (void)viewDidLoad
{
    NSLog(@"viewDidLoad");
    [super viewDidLoad];

    self.scrollView.contentSize = self.scrollView.frame.size;
    self.scrollView.delegate = self;
    CGRect rect = CGRectZero;
    rect.size = self.image.size;
    self.scrollView.minimumZoomScale = 0.5;
    self.scrollView.maximumZoomScale = 2.5;
    self.scrollView.zoomScale = 1.0;

    self.imageView = [[UIImageView alloc] initWithFrame:rect];
    self.imageView.image = self.image;
    [self.scrollView addSubview:self.imageView];
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

}
- (IBAction)tappedAction:(id)sender {
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[self.image] applicationActivities:nil];
    [self presentViewController:activityVC animated:YES completion:nil];
}

- (void)viewDidLayoutSubviews
{
    self.imageView.frame = self.scrollView.bounds;
}


#pragma mark - UIScrollViewDelegate

// mandatory zooming method in UIScrollViewDelegate protocol

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    UIView *subView = [scrollView.subviews objectAtIndex:0];

    CGFloat offsetX = MAX((scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5, 0.0);
    CGFloat offsetY = MAX((scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5, 0.0);

    subView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX,
                                 scrollView.contentSize.height * 0.5 + offsetY);
}

-(void)setImageURL:(NSURL *)imageURL
{
    NSLog(@"setImageURL");
    _imageURL = imageURL;
    self.image = [UIImage imageWithContentsOfFile:[imageURL path]];
}

@end

scrollViewDidZoom:中的代码用于保持图像居中。