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

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

新規登録して質問してみよう
ただいま回答率
85.51%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

4540閲覧

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

taratail

総合スコア76

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/09/10 15:25

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

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

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

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

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

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

ご意見をお聞きしたいです。よろしくお願いします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

その案はやれば可能かもしれませんが、少なくとも今の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 10:26

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taratail

2015/09/12 10:37

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

0

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

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

swift

1 struct iPhone6 { // Landscape 2 static let size = CGSizeMake(1334, 750) 3 static let width: CGFloat = 1334 4 static let height: CGFloat = 750 5 } 6 7 override func loadView() { 8 let size = UIScreen.mainScreen().bounds.size 9 let scale = UIScreen.mainScreen().scale 10 let realSize = CGSizeMake(size.width * scale, size.height * scale) 11 12 print(result) 13 14 view = UIView() 15 view.frame = UIScreen.mainScreen().bounds 16 view.transform = CGAffineTransformMakeScale(realSize.width / iPhone6.width, realSize.height / iPhone6.height) 17 }

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

投稿2015/09/16 03:27

編集2015/09/16 03:28
taratail

総合スコア76

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問