2014-06-24 2 views
0

У меня UIScrollView с UIImageView на нем. Я устанавливаю изображение в коде, и он может иметь разную ширину (высота всегда одна и та же). Я хочу сделать это прокручиваемым (например, увидеть только часть его и перетащить его влево/вправо, чтобы увидеть остальные).UIScrollView и UIImageView - перемещение горизонтально

У меня есть этот код, выполняемый после изменения изображения:

float x = self.imageView.frame.origin.x; 
float y = self.imageView.frame.origin.y; 
float w = scaleImg.size.width; 
float h = scaleImg.size.height; 

self.imageView.frame = CGRectMake(x, y, w, h); 
self.imageView.bounds = CGRectMake(0, 0, w, h); 


w = self.frame.size.width; 
h = self.scrollView.frame.size.height; 

[self.scrollView setContentSize: CGSizeMake(w + 20, h)]; 

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

Я использую iOS7, раскадровку, автозапуск.

+0

Я думаю, что вы можете попробовать установить скроллинг с прокруткой с анимацией во время прокрутки. Сделайте контент-смещение в зависимости от текущего и следующего/предыдущего размера изображения. Отключите автозапуск, если вы изменяете размер изображения в своем коде. – gopal

+0

Если отключить автозапуск, остальное, мой графический интерфейс будет неправильным. –

+0

, поэтому не изменяйте размер кода и попробуйте UIImageView contentMode AspectFit. – gopal

ответ

1

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

UIImage *image; 
    UIScrollView *scrollView; 
    UIImageView *imageView; 

    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(.0f, 
                   .0f, 
                   scrollView.frame.size.height*image.size.width/image.size.height, 
                   scrollView.frame.size.height)];//fixed height 
    imageView.image = image; 
    imageView.contentMode = UIViewContentModeScaleToFill; 
    [scrollView addSubview:imageView]; 
    scrollView.contentSize = imageView.frame.size; 
    scrollView.contentOffset = CGPointMake((scrollView.contentSize.width-scrollView.frame.size.width)*.5f, .0f);//scroll to center 

Примечание: Я разработал это только для изображений с пропорционально большей шириной, а затем с прокруткой. Если это не всегда так, вы должны создать определенную логику для других изображений (либо фон видим, либо прокручивается в координате Y).

+0

Спасибо, это сработало –

+0

Редактировать: только изменение, которое я сделал, это contentMode, установленный в UIViewContentModeLeft. С вашим решением он сжимает изображение. –

0

Я думаю, вы должны удалить следующие строки:

w = self.frame.size.width; 
h = self.scrollView.frame.size.height; 

scrollView «s размер содержания должен отражать размер закрытого содержания, то есть он должен быть scaleImg.size.width & scaleImg.size.height.

+0

Я тоже пробовал, но с тем же результатом. –

0

вы указали w как ширину как для прокрутки, так и для изображения. Размер содержимого должен быть больше, чем прокрутка. Попробуйте увеличить ширину изображения больше, чем scrollview.

Смежные вопросы