Как показать несколько изображений внутри 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)];


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