質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

端末サイズごとにUIKitの位置・サイズやフォントサイズを一括変更するためにアフィン変換は有効か?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,733

taratail

score 70

お世話になっております。
ゲーム開発などにおいて、表示される全ての画像やUIKit、フォントサイズなどの比率が異なってしまうと不都合がある場合があります。

そのようなとき、あらゆる画像サイズやフォントサイズを用意するのではなく、例えばiPhone6をベースに開発して、最終的に全てを表示している親のViewをCGTransformMakeScaleでアフィン変換し、実際の端末サイズに無理やり合わせるという方法を考えました。

アフィン変換をしない場合、特にフォントサイズの調整が大変かと思われます。(あらゆる端末に合ったフォントサイズを自力で選んでおく必要があると認識しています)。

ゲームの操作体感が、フレームレベルのリアルタイムで求められるものでない場合、このようなやり方は実際に使われうる方法でしょうか?

iPhoneとiPadでは、縦横比率がかなり違ってしまいます。その場合はiPad側のある程度の部分をカットしiPhoneの比率に近づけて、カットされた部分は別の背景を載せるなどの工夫が可能であるとすれば、アフィン変換自体は現実的な方法となりうるでしょうか?

もちろん、実際にどういうソフトウェアを作るかにもよるとは思います。ですが、「そのやり方では決定的に問題がある」とか「一般にはまず採用されない方式である」というレベルで否定されるものではないかどうかをお聞きしたいです。

ご意見をお聞きしたいです。よろしくお願いします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

その案はやれば可能かもしれませんが、少なくとも今のiPhoneでそういう手法でやるケースは少ないと思います。

というのは、iPhoneの画面サイズも最近はバリエーションが増えてはいますが、今でも幅は320ピクセル固定で考え、高さは480ピクセル(iPhone4s)か568ピクセル(iPhone5/5s)の2つだけ対応すれば、それでなんとかなるからです。上下を多少余白にしてもいいのだったら、高さ480ピクセルの1パターンだけ考えたのでもなんとかなります。

それをiPadやiPhone6/6Plusで動かしたらどうなるかというと、
まずiPadの場合、iPhone専用として作られたアプリは、自動的にiPhone互換モード(320x480サイズ)で動作します。
iPhone6/6Plusの場合、320x568ピクセルの起動画像しかないアプリは、自動的に拡大モード(320x568サイズ)で動作します。

要するに、古いアプリのことを考えて、古いやり方で作っているアプリは古い画面サイズで動くよう、OSが画面を拡大してなんとかしてくれるということです。

ただ、そういった自動拡大は画像がぼやけたり、大きい画面サイズのメリットが活かせなかったりするので、競争相手のアプリがきれいで使いやすい最新画面のアプリを作ったらユーザーはそちらに流れます。そのため、どのアプリもできるだけ本来の解像度に対応し、ユーザーから高い評価を得ようとしているのが現状のiPhone用アプリの実情だと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/12 19:37

    回答有難うございます。
    iPhone4s, iPhone5/5sに対応していれば、互換モードで動作するというのを初めて知りました。ただその上で、品質を求めるならあらゆる端末のサイズに対応したアプリを作る必要があるのですね。ありがとうございました。

    キャンセル

0

質問者ですが、一応アフィン変換のやり方を記述しておきます。
以下の記事の最後の部分を参考にしました。

Story Board 抜きで、コードオンリーで iOS アプリの UI を作る

  struct iPhone6 {  // Landscape
    static let size = CGSizeMake(1334, 750)
    static let width: CGFloat = 1334
    static let height: CGFloat = 750
  }

  override func loadView() {
    let size = UIScreen.mainScreen().bounds.size
    let scale = UIScreen.mainScreen().scale
    let realSize = CGSizeMake(size.width * scale, size.height * scale)
    
    print(result)
    
    view = UIView()
    view.frame = UIScreen.mainScreen().bounds
    view.transform = CGAffineTransformMakeScale(realSize.width / iPhone6.width, realSize.height / iPhone6.height)
  }

5000個程度のUILabelを配置し、移動させるアニメーションを実行しましたが、iPhone5sで滑らかな動作を確認しました。実機ではUILabelの生成に多少時間がかかるようですが、アフィン変換でチラつくなどはなく動作しています。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • iOSに関する質問
  • 端末サイズごとにUIKitの位置・サイズやフォントサイズを一括変更するためにアフィン変換は有効か?