在iPad上显示图像/幻灯片/容器的最佳方法是什么?

时间:2010-07-22 23:09:24

标签: iphone ipad layout slide

对于我正在编写的应用程序,我需要显示几个视图(在我的情况下图像,但我认为这并不重要),其风格类似于图像在iPad的Fotos应用程序中的显示方式。考虑这个图:

alt text http://img25.imageshack.us/img25/4338/slides.jpg

显然,在纵向视图中,每行可以容纳的幻灯片数量少于横向视图。我现在/想做什么:

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

我不确定哪些是将幻灯片放到屏幕上的最佳方法。我原本只是循环遍历它们并使用每张幻灯片的框架将它们放到viewControllers视图上(然后我可以计算并在每5张幻灯片之后增加y值)。然而,如果我这样做,我担心我的视图基本上只支持一个屏幕方向,因为如果方向改变我需要重新传输所有幻灯片,这似乎是浪费资源给我(?)。

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

我肯定不是第一个考虑这个问题的人:)

感谢您的回答!

1 个答案:

答案 0 :(得分: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,因此自我按钮ivar。

是的,当屏幕方向发生变化时,您需要重新布局。要做到这一点,请使用以下方法:

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

调用您的布局代码。就我而言,它是layoutButtons。这是在UIScrollView的子类中,因此在自动旋转后自动调整视图时,会调用layoutSubviews方法。

如果您使用的是UIScrollView,请确保同时更新self.contentSize ivar。