UIScrollView: невозможно установить статус-кво после увеличения - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь загрузить изображение в низком разрешении в виде прокрутки и после первого увеличения заменить его изображением в высоком разрешении. Первая попытка прошла не очень хорошо. Чтобы лучше понять, что происходит, я сейчас пытаюсь загрузить изображение в высоком разрешении и заменить его тем же изображением в высоком разрешении после первого увеличения, то есть установить статус-кво. На мой взгляд, у меня есть:

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]];
[scrollView addSubview:imageView];

scrollView.contentSize = imageView.bounds.size;
scrollView.minimumZoomScale = 1.0;
scrollView.minimumZoomScale = 0.25;
scrollView.zoomScale = 0.251497;
scrollView.clipsToBounds = YES;
scrollView.delegate = self;

Это дает:
imageView.frame.size = 420 580 (кадр вида прокрутки)
imageView.bounds.size = 1670,2306

В scrollViewDidEndZooming: я делаю:

[imageView removeFromSuperview];
[imageView release];
scrollView.zoomScale = 1.0;

CGRect svb = CGRectZero;
svb.size = scrollView.frame.size;
scrollView.bounds = svb;

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]];
[scrollView addSubview:imageView];

scrollView.contentSize = imageView.bounds.size;
scrollView.maximumZoomScale = 1.0;
scrollView.minimumZoomScale = 0.25;
scrollView.zoomScale = 0.251497;

Это дает:

imageView.frame.size = 1670,2306  
imageView.bounds.size = 1670,2306  

Я не могу понять, почему imageView.frame не масштабируется, как в viewDidLoad. Любая идея о том, что я делаю неправильно или отсутствует?

1 Ответ

0 голосов
/ 16 июня 2011

Вы должны указать scrollview, какое представление вы хотите увеличить, это делается с помощью метода делегата - (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView

Так что в вашем случае добавьте это, и оно будет работать!

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView {
    return imageView;
}

Также никогда не делайте:

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]];

, если вы хотите изменить переменную экземпляра, всегда делайте:

self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]]; 

приведет к утечке.

лучший метод:

UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LargeImage.png"]];
    self.imageView = imgView;
    [imgView release];
imgView = nil;

Если вы не сделаете это самостоятельно, ваша программа может время от времени падать (не всегда, поэтому трудно отследить ее)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...