2013-06-06 3 views
1

У меня есть требование для прокрутки изображений по горизонтали и по вертикали.Прокрутка по горизонтали и по вертикали в обоих направлениях

У меня есть разделы, которые будут segregated vertically и in each section itself it will be so many images which will be scrolled horizontally.

Я сделал вертикальную прокрутку, используя UICollectionView с Ray wenderlich tutorial, но как получить горизонтальную прокрутку в каждом разделе?

Должен ли я использовать для этой цели любой другой объект, например UITableView или UIScrollview?

Доступно любое учебное пособие, как этого достичь?

Is it compulsory to implement Layout subclass or UICollectionviewFlowlayout when using collection view?

EDIT

До сих пор я реализовал этот код, который прокручивает вертикально и имеет 5 разделов, каждый, но не в состоянии выделить отдельные секции

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section; 
{ 
    NSArray *arrayReturn = [self returnArray:section]; 
    return arrayReturn.count; 
} 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 5; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ImageCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"imagecell" forIndexPath:indexPath]; 

    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ 
     NSArray *arrSection = [NSArray arrayWithArray:[self returnArray:indexPath.section]]; 
     NSString *fileName = [arrSection objectAtIndex:indexPath.row]; 
     UIImage *image = [UIImage imageNamed:fileName]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
//    cell.imgVw.image = ; 
       if([CollectionView.indexPathsForVisibleItems containsObject:indexPath]){ 
        ImageCell *currentCell = (ImageCell *) [cv cellForItemAtIndexPath:indexPath]; 
        currentCell.imgVw.image = image; 
       } 

      }); 
    }]; 

    [self.thumbnailQueue addOperation:operation]; 

    return cell; 
} 

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 
{ 

    HeaderView *Header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"PhotoHeaderView" forIndexPath:indexPath]; 

    Header.lblHeaderTitle.text = @"Header title"; 

    Header.backgroundColor = [UIColor yellowColor]; 
    return Header; 
} 
+1

Любой снимок экрана то, что именно объясняет ваше требование? –

+0

все они основаны на ContentSize вашего ScrollView, так что пять соответствующих contentSize вашего ScrollView и дать блокировку направления UIScrollView. – iPatel

ответ

1

Вот подобный учебник:

http://www.raywenderlich.com/4723/how-to-make-an-interface-with-horizontal-tables-like-the-pulse-news-app-part-2

В принципе, вам необходимо выполнить следующие действия:

  • Возьмите Tableview или CollectionView
  • В каждой ячейке вам нужно добавить Scrollview с горизонтальной прокруткой включена.
  • Добавляйте элементы для прокрутки каждой ячейки при создании ячеек и дайте прокрутку просмотреть соответствующий размер содержимого.

Это даст вам желаемый результат.

+0

Добавление прокрутки в каждую ячейку приведет к проблемам с памятью. – Heena

+0

Это увеличит использование памяти в представлении, но я не думаю, что это вызовет проблемы с памятью. Это аналогичный случай использования пользовательской ячейки, имеющей некоторый вид внутри нее. – Amit

+0

Но было бы лучше, если бы я мог использовать представление коллекции, поскольку он автоматически управляет высотой и шириной ячейки при изменении ориентации. – Heena

0

Попробуйте

**viewController.h** 

IBOutlet UIScrollView *scrollViewMain; 


**viewController.m** 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self createDisplay]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

-(void) createDisplay 
{ 
for(UIView *subView in scrollViewMain.subviews) 
{ 
    if(![subView isKindOfClass:[UIImageView class]]) 
    { 
     [subView removeFromSuperview]; 
    } 
} 
int yPos =5; 

for (int i=0; i< 10; i++) 
{ 

    int xPosition=5; 


    UIScrollView *scrollView =[[UIScrollView alloc]initWithFrame:CGRectMake(xPosition, yPos, scrollViewMain.frame.size.width, 100)]; 
    scrollView.backgroundColor =[UIColor clearColor]; 
    scrollView.autoresizingMask =UIViewAutoresizingFlexibleWidth; 



    xPosition +=5; 

    for (int j=0; j<10; j++) 
    { 

     UILabel *lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(xPosition, 0, 100, 100)]; 
     lblTitle.textColor = [UIColor whiteColor]; 
     lblTitle.backgroundColor =[UIColor greenColor]; 
     lblTitle.text = @"test"; 
     lblTitle.numberOfLines =0; 
     lblTitle.font = [UIFont boldSystemFontOfSize:15]; 

     [scrollView addSubview:lblTitle]; 

     xPosition +=100; 
     xPosition +=10; 
    } 
    [scrollView setContentSize:CGSizeMake(xPosition, 100)]; 
    [scrollViewMain addSubview:scrollView]; 
    yPos +=120; 
} 
[scrollViewMain flashScrollIndicators]; 
[scrollViewMain setContentSize:CGSizeMake(0, yPos)]; 
    } 
Смежные вопросы