UIImageView を含む UIView があります。UIImageViews は、アプリのブランド ロゴのように機能します。デバイスを回転させると、含まれている UIView のサイズが画面の横または縦の比率に対応するように変更されます。
私が達成しようとしているのは、それに応じて UIImageView をスケーリングし、プロポーションも左マージンに保つことです。
これは、一番上の白い「バナー」の実際のコードです。
UIView *topBanner = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, height_topBanner)];
[topBanner setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin)];
[topBanner setBackgroundColor:[UIColor whiteColor]];
topBanner.autoresizesSubviews = YES;
// the logo
UIImage *topBanner_logo = [UIImage imageNamed:@"logo.png"];
float logoAspectRatio = topBanner_logo.size.width/topBanner_logo.size.height;
topBanner_logoView = [[UIImageView alloc] initWithFrame:CGRectMake(topBanner.frame.size.width/100*3, topBanner.frame.size.height/100*7, (topBanner.frame.size.height/100*86)*logoAspectRatio, topBanner.frame.size.height/100*86)];
[topBanner_logoView setImage:topBanner_logo];
topBanner_logoView.backgroundColor = [UIColor blueColor];
topBanner_logoView.contentMode = UIViewContentModeScaleAspectFit;
[topBanner_logoView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleRightMargin)];
[topBanner addSubview:topBanner_logoView];
[self.view addSubview:topBanner];
これが私の出発点です。起動時に iPad を縦向きにします。
これを横向きに回転させると、次のようになります。
ご覧のとおり、UIImage の縦横比は問題ありませんが、UIImageView はコンテナーのサイズの変更に合わせて伸縮するため、余分な境界線が表示されます (UIImageView の背景色を強調表示するように設定します)。 UIImage は UIImageView に収まり、その中央に配置されます。
アプリを横向きモードで直接起動すると、同じ-逆-が発生します。
それから私はそれを回転させます:
...そして、上下に余分な境界線があるロゴを取得します。
回転の変更ごとにすべてのサイズを再計算する関数を作成できることはわかりますが、iOS の自動回転/サイズ変更手順をハッキングせずに UIImageView と UIImage を設定して機能させる方法があるかどうかを自問しています。 . とてもシンプルに聞こえます!