アプリ関連ニュース
新人奮闘記5
iOS入門
今回から、Xcodeを使ってシンプルな電卓アプリを作成していきたいと思います。
今回は手始めにiPhone5、5s、5cを想定した画面サイズが4インチの端末を対象として作成していきます。
※iOSバージョン、AutoLayOut画面回転等は今回は考慮しません。
まずは、アプリのイメージを図にしてみます。

[図の説明]
画面4インチの全体サイズは568px×320pxですから、それを基準にボタンなどのオブジェクトを
配置してみました。
行ごとのオブジェクトの間隔は全て2.5pxに設定しました。
列ごとの間隔は5pxですが、両サイドの淵は、 2.5pxとしています。
ボタンの数は計18個、入力値や計算結果が表示されるラベルを一つ用意しました。
ボタンサイズは75px×75pxの正方形で、(C),(=)ボタンの二つは、75px×155pxとしました。
図の最上部、20pxは、電池残量や、電波状態が表示されるステータスバーなので、こちらも計算にいれました。
それではグラフィカルにドラッグ&ドロップでボタンを配置したりできてしまう、ストーリーボードを使って画面を作成して行きます。
※プロジェクト作成やシュミレーターの設定は割愛させて頂きます。
その前に今回はAutoLayoutは使いませんので、show the File inspectorタブから
Use Auto Layout のチェックを外しました。デフォルトではチェックが入っています。
[オブジェクトの配置]
Show the Object libraryタブをクリックすると、たくさんのオブジェクトが用意されています。
ここからViewへドラッグ&ドロップで、適当に配置してみたいと思います。


ボタンと背景の色を区別するため、View->Show the Attributes inspector->Background
にて背景色をターコイズに変更してみました、ボタンの色も同じようにホワイトに変更しています。
これで、ボタン配置の準備は整いました。
ボタンを選択した状態でShow the Size inspectorタブからWidth、Heightを設定します。
この時、x、yの値に注意が必要で、Viewの左上が0,0となり。ボタンの左上を基準としてViewへ配置していきます。
例えばxが0ならボタンはViewの左端にぴったりと張り付き、320とするとViewをはみ出して右サイドの画面外に描画されます。
これを考慮して配置していきますが、オブジェクトそれぞれのプロパティを表に示します。
※細かな計算は省略します。

各オブジェクトのプロパティを表の値に設定していきます。

このようにボタンやラベルを一つずつ設定していきます。
[結果]

画面の作成は完了しましたが、非常に手間に感じちゃいました。
近日中にもAutoLayoutで作ってみたいと思います。
今回は画面作成のみとなりますが、次回は動作するように実装していきたいと思います。
keny
admin at 2016年07月21日 10:00:55
新人成長記録4th
こんにちは、Android開発プログラマのpoppyです
前回の記事では、
ListViewにおける動的なViewの生成をご紹介いたしました
今回は、Fragmentについて記事にしていきたいと思います
admin at 2016年07月19日 10:00:01
- 2016年7月15日
- VR
VRにも使える!ジェスチャーコントロール
今年はVR元年!PSVRも瞬時に完売したようでVRに対する世間の盛り上がりを強く感じます。
VRが脚光を浴びている最中、併せて注目が集まっているデバイスがあります。
それはジェスチャーコントロールです。
komu at 2016年07月15日 10:00:05
- 2016年7月14日
- 未分類, 他の話題, Web Service
新人奮闘記4
今回は、再帰関数を用いて素因数分解をするプログラムを作成してみました。
素因数分解と突然言われると、懐かしかったり、どうだったかな?という事で簡単に計算例だけ紹介しておきます。
素因数分解は自然数を素数の積で表します。
72 ,120をそれぞれ素因数分解すると

のようになります。
今回は、与えられた自然数を2^3 × 3^2のようにハット記号で表すプログラムを書いていきます。
さっそく再帰関数を用いたコードを書いてみました。

$x:素数の初期値 $n:今回のターゲット $c:累乗の値x^c
5行目で関数をコールします。
8行目にて、xがnより大きい時、この関数は終了します。
9~15行目で、実際の計算を行っています。
16行目にて、自分自身をコールしていますが、この時1を加算してコールしています。
これにより、8行目で、関数は終了する事ができます。
7,8,16行目だけ見るとfor文と似た動きである事がわかります。
[基本的なfor文の動作]
初期化->条件式->ステートメント->インクリメント->条件式->ステートメント

[prime_Fact()の動作]
初期化->条件式->ステートメント->インクリメント->初期化->条件式
再帰呼び出しする時、$x+1,もしくは呼び出し以前に$xを変化させなければ無限ループになってしまう事に注意が必要です。
この条件式と再帰呼び出しの間がn回実行される処理という事になります。
[実行結果]

結果は予定通りですが…
いまいち納得がいきません!
上記コードだと、for文の代わりに関数を使って、関数内部(15行目)でechoを使って出力しています。
5行目にprim_Fact()を実行した場所で出力したいのです。つまり、実行結果を丸ごと返り値としてreturnして関数外部で使いたい。
これを解決しようとした時にハマりました。
それでは単純に関数内部で、結果文字列を貯めこんで、return しちゃえばいいんじゃないの?
という事で
14行目で最初の一度だけ$resを初期化
15行目にて連結を繰り返す。
7行目のreturnで貯め込んだ文字列$resを返す。
4行目にて、返り値を確認しています
コード

[実行結果]

見ての通り$resは未定義扱い、おまけにNULLでreturnされていない事がわかります。
繰り返しの中で最後に一度だけ、return されているはずなのに、、、
そこで、returnはどこに何を返すのか、改めて考えていると、大きな勘違いをしている事に
気がつきました。returnは「呼び出し元へ値を返す」事はわかっていたつもりでした。
上記のコードは、7行目でreturnした値は,4行目に返る事を期待したコードです。
しかし、NULLという結果になっているという事は、4行目の関数には返っていません。
では、7行目のreturnはどこへ返っているのでしょうか。
結論から言うと、16行目のprime_Fact()へ返っていました。
動作を図へ示します。

いままでは、シンプルに6行目から16行目を単に繰り返していると考えてました。
上図のように全く同じ関数ではないと考えると、ロジックは変化し、コードも変化します。
図を踏まえた上でもう一度コードを書きなしてみようと思います。

[実行結果]

14行目で$strに最初の素因数分解の結果2^3が格納され、それを引数にして、次のprime_Fact()へ値を渡しています。
これを繰り返し、7行目のreturnが実行された時、一つ前の関数(呼び出し元)へ15行目へ値が返ります。
最終的に初めて関数をコールした場所(5行目)へ値が返ってくるという仕組みです。
以上、細かな例外処理は、割愛させていただきますが、再帰関数に頼る時には、役にたてばと思います。
keny
admin at 2016年07月14日 10:00:13
撮影禁止!
yama at 2016年07月13日 10:00:55