Как показать несколько изображений внутри UIScrollView в iOS
Я делаю одно приложение для iPhone, в котором мне нужно показать некоторые изображения внутри UIScrollView, слева и справа будут две кнопки, которые пользователь может нажать на кнопку, и он покажет следующее или предыдущее изображение. Также внизу есть одна кнопка, когда пользователь нажмет на эту кнопку, он покажет изображение, которое мы выбрали в scrollview.Я хотел бы знать, как мы показываем несколько изображений внутри этого scrollview и при выборе нижней кнопки, как найти, какое изображение было внутри представление ScrollView.
6 ответов
пример из danielbeard.wordpress.com
в случае, если ваши имена изображений не просто цифры:
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[scrollView setPagingEnabled:YES];
[scrollView setAlwaysBounceVertical:NO];
NSArray *imagesArray = [NSArray arrayWithObjects:@"img1.png", @"img2.png", @"img3.png", nil];
for (int i = 0; i < [imagesArray count]; i++)
{
CGFloat xOrigin = i * scrollView.frame.size.width;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
[imageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:i]]];
[imageView setContentMode:UIViewContentModeScaleAspectFit];
[scrollView addSubview:imageView];
}
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width * [imagesArray count], scrollView.frame.size.height)];
посмотрите на этот пример: http://danielbeard.wordpress.com/2012/09/17/adding-a-uiscrollview-to-a-uiview-ios/
Apple.разработчик PhotoScroller демонстрирует использование встроенных UIScrollViews и CATiledLayer для создания богатого пользовательского интерфейса для отображения и разбиения на страницы фотографий, которые могут быть индивидуально панорамированы и увеличены.
CATiledLayer используется для повышения производительности подкачки, панорамирования и масштабирования изображений с высоким разрешением или больших наборов фотографий.
вы просто сначала создайте новое представление о времени выполнения и изображении и назначьте тег всем представлениям, таким как 1000 или 100, и увеличьте значение тега, а затем добавьте это представление в scrollview и две кнопки для перемещения влево и вправо и сделайте их действия выхода и добавьте все виды ScrollView sub в изменяемый массив, как это
indexStart=100;
UIView *AddView=[[UIView alloc]initWithFrame:CGRectMake(55, 0, 100, 100)];
AddView.tag=indexStart;
btnTap.tag=indexStart;
UIImageView *imgview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
[AddView addSubview:imgview];
imgview.image=image;
imgview.tag=1000;
[ScrollView addSubview:AddView];
[imgArray addObject:AddView];
вы используете цикл для этого, а на левой и правой кнопке вы используете этот код, и в этом коде editImgeView-это представление изображения между левым и правым кнопка, где вы показываете изображение, вы просто простой indexstart ++ или -- если пользователь выбирает правую или левую кнопку
for (int index = 0; index < [imgAddArrayAfter count]; index ++ ) {
NSLog(@"index %d",index);
UIView *vc=[imgArray objectAtIndex:index];
NSLog(@"view tag %d",vc.tag);
if(vc.tag == indexStart)
{
UIImageView *modalView=(UIImageView *) [vc viewWithTag:1000];
editImgeView.image=modalView.image;
}
}
Я надеюсь, вы понимаете ;-)
- (void)viewDidLoad
{
[super viewDidLoad];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
scrollView.contentSize = CGSizeMake(320, 465);
[scrollView setScrollEnabled:YES];
[scrollView setPagingEnabled:YES];
[scrollView setAlwaysBounceVertical:NO];
[self.view addSubview:scrollView];
NSMutableArray *arrImage = [NSMutableArray arrayWithObjects:@"food1.jpeg", @"food2.jpeg", @"food3.jpeg",@"food4.jpeg", @"food5.jpeg", @"food6.jpeg",@"food7.jpeg", @"food8.jpeg", @"foo9.jpeg",@"food10.jpeg", @"food11.jpeg", @"food12.jpeg",@"food13.jpeg", @"food14.jpeg", @"food15.jpeg", @"food16.jpeg", nil];
for (int i = 0; i < [arrImage count]; i++)
{
CGFloat xOrigin = i * scrollView.frame.size.width;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xOrigin, 0, scrollView.frame.size.width, scrollView.frame.size.height)];
[imageView setImage:[UIImage imageNamed:[arrImage objectAtIndex:i]]];
[imageView setContentMode:UIViewContentModeScaleAspectFit];
[scrollView addSubview:imageView];
}
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width * [arrImage count], scrollView.frame.size.height)];
}
Я знаю, что этот поток старый, но я думаю, что проблема с загрузкой много изображений в виде прокрутки все еще существует. Если вы хотите загрузить изображения в режиме прокрутки, вы столкнетесь с проблемой использования памяти. Изображения, скорее всего, потребляют большую часть памяти вашего устройства. Единственный способ сделать это-создать многоразовое представление прокрутки, которое работает подобно uitableview-представление прокрутки, которое имеет пул представлений (с изображениями), готовый к отображению. Это может быть довольно сложно создавать.
Я создал проект с открытым исходным кодом для поддержки многоразовой загрузки изображений в режиме прокрутки. Это очень легко реализовать. Вам нужно вызвать пару методов делегата и источника данных, и все. Существует также Пример проекта для obj-c и swift, чтобы сделать его легким для понимания. Пожалуйста, не стесняйтесь вносить свой вклад. Надеюсь, это будет полезно.
вот источник:https://github.com/sumofighter666/ReusableScrollView