Изображения рядом в массиве xcode (в UITableViewCell) - PullRequest
0 голосов
/ 31 октября 2011

У меня есть массив изображений (может быть до 25), которые должны располагаться рядом (это значки доступа, указывающие, какие объекты есть в местоположении)

У меня есть изображения в массиве, и я поиграл с использованием UIImageView в UITableViewCell. (прежде чем пробовать массив, я тренируюсь со статическими изображениями). Однако они перекрывают друг друга. Есть ли способ заставить изображения направо от предыдущего без обработки отступа +60 пикселей вправо каждый раз:

if (indexPath.section == 0)
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierImage];
        // I am assuming this image never changes and there is one row in this section! If it does change, use viewWithTag to get hold of the image view.
        if (cell == nil) 
        {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifierImage] autorelease];
            UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)]autorelease];
            imageView.tag = 1;
            imageView.image = [UIImage imageNamed:@"prem.jpg"];

            [cell addSubview:imageView];

            UIImageView *imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(60,0,50,50)]autorelease];
            imageView2.tag = 2;
            imageView2.image = [UIImage imageNamed:@"prem.jpg"];

            [cell addSubview:imageView2];

        }
        return cell;

    }

Вышеприведенное работает для двух изображений, однако это не очень элегантно и кажется глупым делать это с более чем 25 потенциальными изображениями (каждый раз, когда количество изображений тоже меняется).

Любые советы приветствуются.

Tom

Ответы [ 4 ]

1 голос
/ 31 октября 2011

Использование горизонтального табличного представления с CGTransform следующим образом: http://iosstuff.wordpress.com/2011/06/29/creating-pulse-style-scrolling-horizontally-scrolling-uitableview-as-a-subview-of-uitableviewcell/

1 голос
/ 31 октября 2011

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

//Let's say your UIScrollView is named 'scrollView' and the array containing your UIImages is called 'imageArray'

CGFloat contentWidth = 0;

for(UIImage *thisImage in imageArray)
{
    UIImageView *thisImageView = [[UIImageView alloc] initWithFrame:CGRectMake([imageArray indexOfObject:thisImage]*(thisImage.size.width + PADDING_IF_ANY), 0, thisImage.size.width, thisImage.size.height)];
    [scrollView addSubview:thisImageView];
    [thisImageView release];

    contentWidth += thisImage.size.width + ([imageArray indexOfObject:thisImage]==0)?0:PADDING_IF_ANY;
}

scrollView.contentSize = CGSizeMake(contentWidth, scrollView.frame.size.height);

Объяснение кода:

PADDING_IF_ANY означает требуемый отступ между двумя изображениями. Код - это просто цикл for, который циклически перебирает ваш массив UIImage, выделяет UIImageView для каждого изображения и устанавливает X-origin на основе позиции индекса UIImage в массиве.

Следовательно, индексная позиция 0 будет размещена в самой левой позиции в представлении прокрутки. Позиция индекса 1 будет установлена ​​на 1 * (ширина изображения + отступ), то есть справа от предыдущего изображения в просмотре прокрутки и т. Д.

Чтобы использовать scrollView в UITableViewCell, сделайте это в cellForRowAtIndexPath:

//This line gets you the frame of the cell relative to the tableview.
CGRect cellFrame = [tableView rectForRowAtIndexPath:indexPath];

//Set the Y origin to 0. This will get you the frame for the scrollView to be added with to the cell.
cellFrame.origin.y = 0;

//Now add your scrollView
scrollView = [[UIScrollView alloc] initWithFrame:cellFrame];
/*
Do stuff
*/
[cell.contentView addSubview:scrollView];
[scrollView release];
1 голос
/ 31 октября 2011

Создайте rects на основе целочисленных значений ivar и поместите его в цикл for, который увеличивает значение xpos ivar каждый раз вокруг цикла.

0 голосов
/ 31 октября 2011

Я думаю, вам нужно изменить эту строку

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];

Я знаю, что это может увеличить память, но другого решения, кроме нее, или просто использовать scrollview.

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