Каков наилучший способ отображения изображений / слайдов / контейнеров на iPad? - PullRequest
0 голосов
/ 23 июля 2010

Для приложения, которое я пишу, мне нужно отобразить несколько видов (в моем случае это изображения, но я думаю, что это не должно иметь большого значения) в стиле, аналогичном тому, как изображения отображаются в приложении Fotos для iPad , Посмотрите на этот рисунок:

альтернативный текст http://img25.imageshack.us/img25/4338/slides.jpg

Очевидно, что при портретном просмотре в каждый ряд может поместиться меньше слайдов, чем при альбомном просмотре. Что я хочу / хочу сделать сейчас:

  • Анимация добавления каждого слайда с помощью анимации скольжения
  • У меня уже есть подкласс UIView, который представляет слайд и реагирует на прикосновения так, как мне нужно.

Я не уверен, что лучше всего разместить слайды на экране. Первоначально я просто собирался пройтись по ним и поместить их в представление viewControllers, используя Frame каждого слайда (тогда я могу сделать подсчет и увеличить значение y после каждых 5 слайдов или около того). Тем не менее, если я сделаю это таким образом, я боюсь, что мой Просмотр будет в основном поддерживать только одну ориентацию экрана, поскольку мне нужно будет ретранслировать все слайды, если ориентация изменится, что мне кажется довольно пустой тратой ресурсов (?).

Как бы вы решили эту проблему? Может быть, есть какая-нибудь возможность «разрыва строки при переполнении», например, с помощью CSS (когда контейнер автоматически переходит на следующую строку, если установлено свойство float, а родительский контейнер не предоставляет достаточно места)?

Я, конечно, не первый человек, который думает об этом:)

Спасибо за ваши ответы!

1 Ответ

1 голос
/ 23 июля 2010

В Какао нет настройки "разрыв строки при переполнении".Если вы хотите сделать что-то такое, вам нужно написать код, который раскладывает слайды.Вот пример кода, который я использую для этого:

CGRect frame = CGRectMake(margins.left, margins.top, cellSize.width, cellSize.height);
for (UIButton *button in self.buttons) {
    button.frame = frame;

    // Move frame to next position
    frame.origin.x += cellSize.width + cellSpacing;
    if (frame.origin.x + frame.size.width > margins.left + contentWidth) {
        frame.origin.x = leftMargin;
        frame.origin.y += cellSize.height + cellSpacing;
    }
}

Я использую UIButtons для каждого изображения, отсюда и self.buttons ivar.

Да, вам нужно будет ретранслировать при изменении ориентации экрана. Для этого используйте метод, подобный следующему:

- (void)layoutSubviews {
    [super layoutSubviews];
    [self layoutButtons];
}

, который вызывает код вашего макета.В моем случае это layoutButtons.Это находится в подклассе UIScrollView, поэтому, когда представление автоматически изменяет размер после автоповорота, вызывается метод layoutSubviews.

Если вы используете UIScrollView, убедитесь, что вы также обновляете ivar self.contentSize.

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