Советы для горизонтальной прокрутки IOS - PullRequest
1 голос
/ 06 марта 2012

Я пытаюсь создать горизонтальный вид прокрутки. Каждый вид содержит одно изображение. [done]

Изначально, когда приложение открывалось, я отображал пару изображений, т.е. 3, чтобы пользователь мог прокручивать изображения между изображениями. [done]

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

Как можно это сделать? «обновить» начальный вид прокрутки?

Обновление Должен ли я использовать делегат для этой связи между контроллерами представления? или как это сделать? 1 основной контроллер, другой, содержащий выбор изображения?

Эта часть выше и многое другое объяснено статьей здесь . (Не реклама, надеюсь, это кому-то тоже поможет).

Часть 1 обновления щедрости :

Думаю, теперь, когда я нашел способ обойтись с делегатами, у меня появился дополнительный вопрос, на который я не могу найти ответ, все примеры, которые я видел, касались обновления табличных представлений.

Баунти часть 2 : Если бы у меня был вид прокрутки в контроллере моего представления и несколько изображений внутри прокрутки. т.е.:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray *images = ...some images array;
    for (int i = 0; i < images.count; i++) {
        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;

        UIImageView *subview = [[UIImageView alloc] initWithFrame:frame];
        subview.image = [images objectAtIndex:i];
        [self.scrollView addSubview:subview];
    }

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * images.count, self.scrollView.frame.size.height);
}

И скажем, в моем контроллере представления реализован какой-то метод делегата didAddImage или didRemoveImage.

Это означает, что массив images будет обновлен.

Фактический вопрос о вознаграждении:

Как бы на самом деле "сказать" контроллеру представления, О.К. теперь у вашего прокрутки есть еще одно изображение для отображения, пожалуйста, обновите или перезагрузите?

Если бы у меня было табличное представление вместо прокрутки и вставка изображений, я бы сделал это примерно так (в моем методе делегата):

-(void) mockDelegatetablemethod:(...) ...{
 [self.images addObject:image];
    NSIndexPath *indexPath = 
     [NSIndexPath indexPathForRow:[self.images count] - 1 
       inSection:0];
    [self.tableView insertRowsAtIndexPaths:
      [NSArray arrayWithObject:indexPath] 
       withRowAnimation:UITableViewRowAnimationAutomatic];
    [self dismissViewControllerAnimated:YES completion:nil];
}

Как можно поступить с прокруткой?

Обновление Bounty, часть 3:

Это «простой» случай, описанный выше, естественно, мне придется поддерживать удаление изображений также, как если бы вы захотели удалить все изображения и добавить новые.

Ответы [ 3 ]

10 голосов
/ 13 марта 2012

Как бы на самом деле "сказать" контроллеру представления, О.К. теперь ваш У scrollview есть еще одно изображение для отображения, пожалуйста, обновите его или перезагрузите?

Ну, вы бы просто добавили новое изображение как подпредставление прокрутки. Так что-то вроде:

- (void)addImage:(UIImage*)image {
    [images addObject:image];

    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * images.count;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UIImageView *subview = [[UIImageView alloc] initWithFrame:frame];
    subview.image = image;
    [self.scrollView addSubview:subview];

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * images.count, self.scrollView.frame.size.height);
}

Или у вас может быть метод, который запускает и «сбрасывает» представление прокрутки, удаляя все подпредставления, а затем повторно добавляет все изображения в массив изображений. Затем вызовите этот метод в viewDidLoad вместо вашего кода, чтобы не дублировать код.

По сути, здесь нет серебряной пули. Вы катаетесь самостоятельно.

2 голосов
/ 15 марта 2012

Это уже реализовано Apple в их примере проекта iOS «PhotoScroller». Он также имеет вид повторного использования. У них даже есть видео WWDC 2010 об этом. Я думаю, что его передовые методы прокрутки или разработки приложений с прокруткой. Не должно быть трудно портировать на Mac

2 голосов
/ 06 марта 2012

Вам понадобится сделать свой скроллер изображений классом, который вы можете указать для загрузки определенных изображений.Вам понадобится ссылка на существующий скроллер изображений, передайте этот указатель в другой контроллер «Выбрать больше изображений».Затем контроллер «Выбрать больше изображений» может сообщить скроллеру изображений, что существует новый список изображений.

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