0

对于我正在编写的应用程序,我需要以类似于在 iPad 的 Fotos 应用程序中显示图像的方式显示多个视图(在我的情况下是图像,但我想这应该不是那么重要)。考虑这个图形:

替代文字

显然,在纵向视图中,每行可以容纳的幻灯片比在横向视图中要少。我现在有/想做的事:

  • 使用滑动动画为每张幻灯片添加动画
  • 我已经有一个 UIView 子类,它代表一张幻灯片,并以我需要的方式响应触摸。

我不确定将幻灯片实际放到屏幕上的最佳方式是什么。我最初只是要遍历它们并使用每张幻灯片的 Frame 将它们放置到 viewControllers 视图上(然后我可以在每 5 张左右幻灯片后进行计数并增加 y 值)。但是,如果我这样做,我担心我的 View 基本上只支持一个屏幕方向,因为如果方向发生变化,我需要重新布局所有幻灯片,这对我来说似乎是一种资源浪费(?)。

你将如何解决这个问题?是否有任何“溢出时换行”功能,例如 CSS(如果设置了 float 属性并且父容器没有提供足够的空间,容器会自动下降到下一行)?

我肯定不是第一个想到这个的人:)

感谢您的回答!

4

1 回答 1

1

Cocoa 中没有“溢出时换行”设置。如果你想做一些这样的事情,你需要编写代码来布置幻灯片。这是我用来执行此操作的代码示例:

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,请确保也更新 self.contentSize ivar。

于 2010-07-22T23:22:07.830 回答