Горизонтальный UIScrollView и сотни миниатюрных изображений в iOS? - PullRequest
31 голосов
/ 12 мая 2011

Мне нужно создать горизонтальный UIScrollView, который будет содержать сотни миниатюр изображений, как слайд миниатюр.

Например, на одном экране будет отображаться 10 миниатюр, каждый из которых расположен горизонтально рядом друг с другом.

Моя проблема в том, что я не знаю, как сделать горизонтальный UIScrollView для хранения нескольких миниатюр, которые отображаются одновременно?

Пример фото как ниже. Смотрите нижнюю часть экрана.

enter image description here

Спасибо.

Ответы [ 5 ]

37 голосов
/ 12 мая 2011

Вы можете добавить все миниатюры программно в ваше представление прокрутки и использовать метод setContentSize UIScrollView.Вы должны передать 2 значения в contentOffset.1 для ширины и 1 для высоты.Пожалуйста, перейдите по ссылке , чтобы узнать больше об этом.Если вам нужна дополнительная помощь, пожалуйста, оставьте комментарий.

Надеюсь, это поможет.

Пожалуйста, рассмотрите следующий пример.

- (void)setupHorizontalScrollView
{
scrollView.delegate = self;

[self.scrollView setBackgroundColor:[UIColor blackColor]];
[scrollView setCanCancelContentTouches:NO];

scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = NO;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;

NSUInteger nimages = 0;
NSInteger tot=0;
CGFloat cx = 0;
for (; ; nimages++) {
    NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", (nimages + 1)];
    UIImage *image = [UIImage imageNamed:imageName];
    if (tot==15) {
        break;
    }
    if (4==nimages) {
        nimages=0;
    }

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

    CGRect rect = imageView.frame;
    rect.size.height = 40;
    rect.size.width = 40;
    rect.origin.x = cx;
    rect.origin.y = 0;

    imageView.frame = rect;

    [scrollView addSubview:imageView];
    [imageView release];

    cx += imageView.frame.size.width+5;
    tot++;
}

self.pageControl.numberOfPages = nimages;
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}

4 голосов
/ 16 марта 2012

Предлагаю взглянуть на Венчик

4 голосов
/ 03 ноября 2011

Проверьте проект bjhomer HSImageSidebarView . Это позволяет загружать скролл-просмотр по горизонтали или вертикали и загружать изображения. Супер прост в реализации.

2 голосов
/ 12 мая 2015

Прежде всего, на storyboard перетащите вид прокрутки и сделайте выход scrollview с именем scrollView. Два массива один mutable и один immutable.

@property(nonatomic,strong)IBOutlet UIScrollView *scrollView;
@property(nonatomic,strong)NSMutableArray *images;
@property(nonatomic,strong)NSArray *imagesName;

В массиве immutable хранятся только те изображения, которые мы хотим отобразить в представлении прокрутки. Убедитесь, что делегат UIscrollview определен. В файле viewcontoller.m в функции didload выполните следующий код:

imagesName = [[NSArray alloc]initWithObjects:@"centipede.jpg",@"ladybug.jpg",@"potatoBug.jpg",@"wolfSpider.jpg",          @"ladybug.jpg",@"potatoBug.jpg",@"centipede.jpg",@"wolfSpider.jpg",nil];

// mutable array used to show the images on scrollview dynamic becaus after one
// image when scroll other will come
images = [[NSMutableArray alloc]init];
scrollView.delegate = self;
scrollView.scrollEnabled = YES;
int scrollWidth = 120;
scrollView.contentSize = CGSizeMake(scrollWidth,80);

int xOffset = 0;

//the loop go till all images will load  
for(int index=0; index < [imagesName count]; index++)
{            
    UIImageView *img = [[UIImageView alloc] init];
    // make the imageview object because in scrollview we need image
    img.frame = CGRectMake(5+xOffset, 0, 160, 110);
    // the offset represent the values, used so that topleft for each image will
    // change with(5+xOffset, 0)and the bottomright(160, 110) 
    NSLog(@"image: %@",[imagesName objectAtIndex:index]);
    img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];
    // The image will put on the img object
    [images insertObject:img atIndex:index];
    // Put the img object at the images array which is mutable array
    scrollView.contentSize = CGSizeMake(scrollWidth+xOffset,110);
    //scroll view size show after 125 width the scroll view enabled
    [scrollView addSubview:[images objectAtIndex:index]];
    // set images on scroll view      
    xOffset += 170;
}
0 голосов
/ 12 мая 2011

Вы можете рассчитать размер контента ширины прокрутки как ширина = количество изображений * размер каждого изображения. Затем установите contentSize вида прокрутки на эту ширину и необходимую высоту (scrollView.contentSize = CGSizeMake(width, height))

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