Каков наилучший способ отображения изображений / слайдов / контейнеров на iPad?
Для приложения, которое я пишу, мне нужно отобразить несколько видов (в моем случае это изображения, но я думаю, что это не должно иметь большого значения) в стиле, аналогичном тому, как изображения отображаются в приложении Fotos для iPad. Посмотрите на этот рисунок:
http://img25.imageshack.us/img25/4338/slides.jpg
Очевидно, что при портретном просмотре в строке может поместиться меньше слайдов, чем при альбомном просмотре. Что я хочу / хочу сделать сейчас:
- Анимируйте добавление каждого слайда с помощью скользящей анимации.
- У меня уже есть подкласс UIView, который представляет слайд и реагирует на прикосновения так, как мне нужно.
В чем я не уверен, так это в том, как лучше всего разместить слайды на экране. Первоначально я просто собирался пройтись по ним и поместить их в представление viewControllers, используя кадр каждого слайда (тогда я могу сделать подсчет и увеличить значение y после каждых 5 слайдов или около того). Тем не менее, если я сделаю это таким образом, я боюсь, что мой Просмотр будет в основном поддерживать только одну ориентацию экрана, поскольку мне нужно будет ретранслировать все слайды, если ориентация изменится, что мне кажется скорее пустой тратой ресурсов (?).
Как бы вы решили эту проблему? Может быть, есть какая-нибудь возможность "разрыва строки при переполнении", например, с помощью CSS (когда контейнер автоматически переходит на следующую строку, если установлено свойство float, а родительский контейнер не предоставляет достаточно места)?
Я, конечно, не первый человек, который думает об этом:)
Спасибо за ваши ответы!
1 ответ
В Какао нет настройки "разрыв строки при переполнении". Если вы хотите сделать что-то, что делает это, вам нужно написать код, который раскладывает слайды. Вот пример кода, который я использую для этого:
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.