Приложение страницы + Autolayout + Масштабирование подвидов при прокрутке

Я работаю над контроллером уже 4 дня и не могу решить свои проблемы!

Позвольте мне объяснить мою архитектуру:

У меня есть "Rootview", который содержит ScrollView и anImageView (оба они добавлены в IB)

Затем у меня есть 4 внешних контроллера просмотра.

Я хочу: поместите мои 4 контроллера просмотра в мой вид прокрутки (это отлично работает, оба представления добавляются в мой scrollView в коде) и разрешите пользователям прокручивать между представлениями

Когда я прокручиваю, у меня есть небольшая анимация, которая масштабирует мои представления до 50%, а затем масштабирует их до 100%.

Когда я отключаю «Автомакет» в IB, все работает отлично! Моя анимация и позиция моих взглядов. Но я не могу отключить его, потому что хочу, чтобы мое приложение работало на iPhone4 и iPhone5.

Я не знаю, как реализовать свои ограничения, чтобы правильно расположить все мои взгляды. Я просто хочу, чтобы мои представления были изменены на 50 пикселей по высоте, чтобы соответствовать экрану iPhone 4.

Вот мой scrollViewConfiguration

- (void)configureScrollView{
/* On déclare le nombre de page la scrollview */
if (self.myCurrentEvent.isEvent)
{
    self.numberOfScrollViewPages = 2;
}
else
{
    self.numberOfScrollViewPages = 4;
}

/* On initialise le tableau qui va contenir les tableviews */
viewControllersArray = [[NSMutableArray alloc] init];

/* Tant qu'on a pas atteint le nombre de pages de la scrollview */
for (unsigned i = 0; i < self.numberOfScrollViewPages; i++)
{
    /* On ajoute NSNull au tableau de tableview */
    [self.viewControllersArray addObject:[NSNull null]];
}

[self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:NO];

/* On configure la content size en prenant la taille de la scroll view x le nombre de pages */
self.myScrollView.contentSize = CGSizeMake(self.myScrollView.frame.size.width * self.numberOfScrollViewPages, self.myScrollView.frame.size.height);

/* On désactive l'affichage du scroll horizontal */
self.myScrollView.showsHorizontalScrollIndicator = NO;

/* On désactive l'affichage du scroll vertical */
self.myScrollView.showsVerticalScrollIndicator = NO;

/* On désactive la fonction scroll to top */
self.myScrollView.scrollsToTop = NO;

/* On indique implémenter les fonction du son delegate */
self.myScrollView.delegate = self;

/* On affiche la première page */
[self loadScrollViewWithPage:0];

/* On affiche la deuxième page */
[self loadScrollViewWithPage:1];

if (!self.myCurrentEvent.isEvent)
{
    [self loadScrollViewWithPage:2];
    [self loadScrollViewWithPage:3];
}}

- (void)loadScrollViewWithPage:(int)page{
/* Si la page passée en paramètre est inférieure à 0, on sort de la fonction */
if (page < 0) return;

/* Si la page passée en paramètre est supérieur au nombre de page de la scrollview */
if (page >= self.numberOfScrollViewPages) return;

/* On récupère la référence vers la view contenu dans le tableau des tableview */
UIViewController *aViewController = [self.viewControllersArray objectAtIndex:page];

/* Si la vue récupérée est nulle */
if ((NSNull *)aViewController == [NSNull null])
{
    switch (page)
    {
        case 0:
            [self configureEventDescriptionViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myEventDescriptionViewController];
            aViewController = self.myEventDescriptionViewController;
            break;

        case 1:
            [self configureListOfContactViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myListOfContactViewController];
            aViewController = self.myListOfContactViewController;
            break;

        case 2:
            [self configureListOfExpensesCategoryViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myListOfExpensesCategoryViewController];
            aViewController = self.myListOfExpensesCategoryViewController;
            break;

        case 3:
            [self configureLinkContactViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myLinkContactViewController];
            aViewController = self.myLinkContactViewController;
        default:
            break;
    }
}

/* Si la superview de la vue est à nil */
if (aViewController.view.superview == nil)
{
    [aViewController.view setTranslatesAutoresizingMaskIntoConstraints:NO];

    CGRect frame;
    frame.size.height = self.myScrollView.frame.size.height;
    frame.size.width = 320;
    frame.origin.x = page * 320;
    frame.origin.y = 0;

    [aViewController.view setFrame:frame];

    /* On ajoute la vue courante à la scrollview */
    [self.myScrollView addSubview:aViewController.view];
}

aViewController = nil;}

Часть, где я устанавливаю фрейм кадра viewController, работает, только если я отключу автозапуск

Надеюсь, вы поняли, что я хотел сказать...

Извините за мой плохой английский...

Пуйл


person Pwyll28    schedule 29.11.2012    source источник


Ответы (1)


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

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

person Gaz Long    schedule 29.11.2012
comment
Да... Но у меня около 15 .xib... я не хочу использовать это решение для ВСЕХ моих .xib :( - person Pwyll28; 01.12.2012