UIScrollView setZoomScale не работает? - PullRequest
7 голосов
/ 13 апреля 2010

Я борюсь с моим UIScrollview, чтобы заставить его увеличить базовый UIImageView. На мой взгляд, контроллер, который я установил

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
 return myImageView;
}

В методе viewDidLoad я пытаюсь установить zoomScale в 2 следующим образом (обратите внимание, что UIImageView и Image установлены в Интерфейсном Разработчике):

- (void)viewDidLoad {
 [super viewDidLoad];

 myScrollView.contentSize = CGSizeMake(myImageView.frame.size.width, myImageView.frame.size.height);
 myScrollView.contentOffset = CGPointMake(941.0, 990.0);
 myScrollView.minimumZoomScale = 0.1;
 myScrollView.maximumZoomScale = 10.0;
 myScrollView.zoomScale = 0.7;
 myScrollView.clipsToBounds = YES;
 myScrollView.delegate = self;

 NSLog(@"zoomScale: %.1f, minZoolScale: %.3f", myScrollView.zoomScale, myScrollView.minimumZoomScale);
}

Я пробовал несколько вариантов этого, но NSLog всегда показывает zoomScale 1.0.

Есть идеи, где я облажался?

Ответы [ 4 ]

20 голосов
/ 29 апреля 2010

Я наконец получил это на работу. то, что вызвало проблему, было вызовом делегата, являющимся в конце. Теперь я переместил его вверх и ... вот и мы.

Новый код выглядит так:

- (void)viewDidLoad {
 [super viewDidLoad];

 myScrollView.delegate = self;
 myScrollView.contentSize = CGSizeMake(myImageView.frame.size.width, myImageView.frame.size.height);
 myScrollView.contentOffset = CGPointMake(941.0, 990.0);
 myScrollView.minimumZoomScale = 0.1;
 myScrollView.maximumZoomScale = 10.0;
 myScrollView.zoomScale = 0.7;
 myScrollView.clipsToBounds = YES;
}
1 голос
/ 09 июня 2014

Я знаю, что уже довольно поздно, когда идут ответы, но проблема в том, что ваш код вызывает zoomScale до того, как он устанавливает делегата. Вы правы, другие вещи там не требуют делегата, но zoomScale делает, потому что он должен иметь возможность перезвонить, когда масштабирование завершено. По крайней мере, я так думаю.

1 голос
/ 13 апреля 2010

Вот еще один пример, который я сделал. Этот использует изображение, которое включено в папку ресурсов. По сравнению с тем, который у вас есть, этот добавляет UIImageView к представлению как подпредставление, а затем изменяет масштаб на весь вид.

-(void)viewDidLoad{

[super viewDidLoad];

UIImage *image = [UIImage imageNamed:@"random.jpg"];

imageView = [[UIImageView alloc] initWithImage:image];

[self.view addSubview:imageView];

[(UIScrollView *) self.view setContentSize:[image size]];

[(UIScrollView *) self.view setMaximumZoomScale:2.0];

[(UIScrollView *) self.view setMinimumZoomScale:0.5];

}
0 голосов
/ 09 июня 2015

Мой код должен быть полностью сумасшедшим, потому что масштаб, который я использую, полностью противоположен тому, что делают учебники и другие. Для меня minScale = 1 означает, что изображение полностью уменьшено, и соответствует UIImageView, в котором оно содержится.

Вот мой код:

    [self.imageView setImage:image];
    // Makes the content size the same size as the imageView size.
    // Since the image size and the scroll view size should be the same, the scroll view shouldn't scroll, only bounce.
    self.scrollView.contentSize = self.imageView.frame.size;

    // despite what tutorials say, the scale actually goes from one (image sized to fit screen) to max (image at actual resolution)
    CGRect scrollViewFrame = self.scrollView.frame;
    CGFloat minScale = 1;
    // max is calculated by finding the max ratio factor of the image size to the scroll view size (which will change based on the device)
    CGFloat scaleWidth = image.size.width / scrollViewFrame.size.width;
    CGFloat scaleHeight = image.size.height / scrollViewFrame.size.height;
    self.scrollView.maximumZoomScale = MAX(scaleWidth, scaleHeight);
    self.scrollView.minimumZoomScale = minScale;
    // ensure we are zoomed out fully
    self.scrollView.zoomScale = minScale;

Это работает, как я ожидаю. Когда я загружаю изображение в UIImageView, оно полностью уменьшается. Затем я могу увеличить масштаб и затем панорамировать изображение.

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