UIImage не помещается в UIScrollView при запуске - PullRequest
9 голосов
/ 28 мая 2011

У меня есть изображение вроде:

Want To Have

Когда я загружаю изображение в uiimageview и затем добавляю его в качестве подпредставления в uiscrollview, при запуске изображение выглядит так:

Dont Want To Have

Проблема в том, что я хочу, чтобы при запуске все изображения отображались на экране, но оно уже увеличено.Есть ли способ справиться с этим, пожалуйста, помогите ...

У меня есть код как:

[self.view addSubview:scrollView];
UIImageView *tempImageView = 
[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Tree.jpg"]];
self.imageView = tempImageView;
[tempImageView release];
[scrollView setContentMode:UIViewContentModeScaleAspectFit];
[imageView sizeToFit];
scrollView.backgroundColor=[UIColor blackColor];
scrollView.contentSize = imageView.frame.size;
scrollView.minimumZoomScale = scrollView.frame.size.width / imageView.frame.size.width;
scrollView.maximumZoomScale = 4.0;
[scrollView setZoomScale:1.0];
scrollView.clipsToBounds = YES;
scrollView.delegate = self;
[scrollView addSubview:imageView];

Ответы [ 5 ]

16 голосов
/ 28 мая 2011

Вероятно, вы ищете это,

UIImageView *tempImageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Watson.jpg"]] autorelease];
tempImageView.frame = scrollView.bounds;
self.imageView = tempImageView;

scrollView.backgroundColor = [UIColor blackColor];
scrollView.minimumZoomScale = 1.0  ;
scrollView.maximumZoomScale = imageView.image.size.width / scrollView.frame.size.width;
scrollView.zoomScale = 1.0;
scrollView.delegate = self;

[scrollView addSubview:imageView];
2 голосов
/ 28 мая 2011

Посмотрите на свойство contentMode UIView (UIImageView также поддерживает это).

imageView.contentMode = UIViewContentModeScaleAspectFit;

Это должно работать ...

1 голос
/ 28 мая 2011

Я думаю, что проблема в

UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Tree.jpg"]];

Документы Apple говорят: «Этот метод корректирует кадр приемника в соответствии с размером указанного изображения. Он также отключает взаимодействие с пользователем для изображенияпросмотр по умолчанию. "
вместо этого используйте

UIImageView *tempImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,480)];
tempImageView.image = [UIImage imageNamed:@"Tree.jpg"];
0 голосов
/ 22 апреля 2013

Я использовал решение Deepak и рекомендации Apple, а также подкласс UIScrollView с UIImageView внутри. Тем не менее, я увеличиваю изображение только на первом макете моего подкласса scrollview и только если размер кадра меньше размера изображения:

- (void)layoutSubviews
{
[super layoutSubviews];

// center the image as it becomes smaller than the size of the screen
CGSize boundsSize = self.bounds.size;
CGRect frameToCenter = _imageView.frame;

// center horizontally
if (frameToCenter.size.width < boundsSize.width)
    frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
    frameToCenter.origin.x = 0;

// center vertically
if (frameToCenter.size.height < boundsSize.height)
    frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
    frameToCenter.origin.y = 0;

_imageView.frame = frameToCenter;

// If image is bigger than frame, we zoom it on first load (zoom value is smaller than 1.0)
if (_firstLayout) {
    _firstLayout = NO;
    self.zoomScale = (self.frame.size.width < _imageView.image.size.width) ? (self.frame.size.width / _imageView.image.size.width) : 1.0;
}
}

Вот как я начинаю свой подкласс:

- (id)initWithFrame:(CGRect)frame image:(UIImage*)image
{
self = [super initWithFrame:frame];
if (self) {

    _firstLayout = YES;

    _imageView = [[UIImageView alloc] initWithImage:image];
    [self addSubview:_imageView];

    self.backgroundColor = [UIColor blackColor];
    self.minimumZoomScale = 0.1;
    self.maximumZoomScale = 10;


    self.delegate = self;
}
return self;
}
0 голосов
/ 28 февраля 2012

Обратите внимание, что здесь также есть описание [scrollView zoomToRect: animated:]

Вы можете установить его на внешние границы вашего изображения, чтобы оно автоматически соответствовало вашему изображению. Но убедитесь, что правильно настроили максимальный ZoomScale согласно решению Deepak выше .

...