0

私が書いているアプリの場合、iPad の Fotos アプリで画像を表示する方法と同様のスタイルで、複数のビュー (私の場合は画像ですが、それほど重要ではないと思います) を表示する必要があります。次の図を検討してください。

代替テキスト

明らかに、縦表示では、横表示よりも行ごとに収まるスライドが少なくなります。私が今持っている/やりたいこと:

  • スライド アニメーションを使用して各スライドの追加をアニメーション化する
  • スライドを表し、必要な方法でタッチに応答する UIView サブクラスが既にあります。

よくわからないのは、実際にスライドを画面に表示する最良の方法は何かということです。私は元々、それらをループして、各スライドの Frame を使用して viewControllers ビューに配置するだけでした (その後、5 枚のスライドごとにカウントして y 値を増やすことができます)。それでも、そのようにすると、方向が変わった場合にすべてのスライドを再レイアウトする必要があるため、View が基本的に 1 つの画面方向のみをサポートするのではないかと心配しています。

この問題をどのように解決しますか?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;
    }
}

画像ごとにUIButtonを使用しているため、self.buttonsivarを使用しています。

はい、画面の向きが変わったらリレーアウトする必要があります。これを行うには、次のような方法があります。

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

これはあなたのレイアウトコードを呼び出します。私の場合、それはlayoutButtonsです。これはUIScrollViewのサブクラスにあるため、自動回転後にビューが自動サイズ変更されると、layoutSubviewsメソッドが呼び出されます。

UIScrollViewを使用している場合は、self.contentSizeivarも更新してください。

于 2010-07-22T23:22:07.830 に答える