頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


Blender KeyPadでiPhoneをテンキーにする

最近Blenderをいじってるんだけど、環境は Mac + APPLE純正キーボード(テンキーなし) + Magic Trackpad を使っているんだ。この組み合わせ、Xcodeでコードを書く分には問題ないんだけど、Blenderを使うとなると若干戸惑うのよ。ネット上のチュートリアルサイトを見ても必要なボタンがなかったりするわけ。

だからテンキーがあれば一撃(テンキーの1を押す)の正面からのビューにする、って操作もカーソルをViewに持って行って’f’を押すってな感じで面倒なんだ。
マウスじゃなくてトラックパッド、という部分に関してはさほど不具合は感じないんだけど、テンキーがないことは痛い。なんとかならないのかなあと思っていたらBlender KeyPadというiPhoneアプリを発見。

Bender Keypad
↑App Storeにあったアプリのスクリーンショットだけどこんな感じで使いたいキーがまとめられてる。

ダウンロードして使ってみたんだけど、、、
いちいちiPhoneへ視線を移す必要があるのが残念かな。いや、極めればブラインドタッチでいけるのかもしれないけど?!どうせなら機能を絞ってジェスチャーでできる方が操作しやすいんだけどなあ。
一度設定すると次からはアプリを起動すると自動的に接続するのは素晴らしい。


任意のファイルをAssistant Editorに表示させる方法

頭と尻尾はくれてやる! / 27インチディスプレイでXcodeを使う
↑ここで27インチディスプレイにしてからAssistant Editorを使ってファイルを右側に追加で表示させてる、って書いたんだけどさ。
実は任意のファイルを追加で表示させる方法がよくわからなかったのよ。

Assistant Editor / Manual

↑Manualってところで任意のファイルを選べる時もあるんだけど、単にファイルが一つしか表示されず他をどうやって選ぶんだ?!ってこともあってね。どうすんのかなあと思って調べてみたらやっと方法が見つかったよ。

ナビゲーター領域でファイル名をクリックするとメインの編集部分にそのファイル内容が表示されるけど、この時にoptionを押しながらファイル名をクリックするとAssistant Editorに表示されるんだね。
しかもAssistant Editorを表示させている状態でも表示させていない状態でもOK。

option + ファイル選択でAssistant Editorに表示されないなら設定を変更してるのかもしれないね。

Xcode / Preferences / Navigation
↑XcodeのPreferencesのNavigationってところでoptionを押しながらファイル名をクリックした場合の挙動をコントロールできる。
ダブルクリックでAssistant Editorに表示させるのはできないっぽい。

これで、なんで表示できないのー?!ってイライラがなくなったよ。


こんなインスタンス変数の宣言方法があるとは知らなかった

ごく最近、人様の書いたあるコードを見て気が付いたんだよ。なんで今まで気が付かなかったんだろうなって感じなんだけどさ。
Objective-Cのインスタンス変数の宣言の仕方のお話ね。どこにどう書くの?ってお話。

昔はヘッダー側に書いてたのよ。でも、そのクラス内だけでしか使わないのでヘッダーに書かなくていいでしょ、ってことで実装ファイル側に書くようになったんだ。その時に俺は一体何を参考にしたのか、、、こんな感じで書く方法を覚えてずっと今までそうしてきたのよ。

Hoge.m
#import “Hoge.h"

@interface Hoge () {
    int age;
}
@end


@implementation Hoge

//いろいろな実装

@end
↑こんな風に無名のカテゴリ(クラス拡張とかクラスエクステンションとか言うそうな)を使って記述してたのよ。 ところが、だよ。

Hoge.m
#import “Hoge.h"
@implementation Hoge {
    int age;
}
↑こんなシンプルに記述できるとは知らなかった!

やっぱり人様のコードを見るのは大事だね。


(参考)
Objective-Cのクラス・カテゴリ・クラス拡張の整理 - $ cat /var/log/shin
Objective-Cのカテゴリ | YOHEI's BLOG


OpenGL ESで日本語のコメントでエラーがでる

OpenGL ESってのを最近いじってるのよ。もちろんiOSデバイス上で動かすことを前提にやってる。
まだよくわかってないことだらけなんだけど、

OpenGL Tutorial for iOS: OpenGL ES 2.0 | Ray Wenderlich

↑このチュートリアルを見ながら動かしてみてる。
ところが指示通りにやっているんだけど、どういうわけか
ERROR: 0:11: 'premature EOF' : syntax error syntax error
ってエラーが出るんだよ。ただ、コピペして動かしてるだけなのにさ。

なんなんだろう?と思っていろいろ調べていたらどうも俺が日本語でコメント追加してたのがまずかったみたいなんだよ。
SimpleVertex.glsl ってシェーダーのファイルの最初の方に
// コメント
こういう形で何か書いてたのがまずかったようで、これを英語にするとか、ファイルの終わり部分へ移動させるとエラーにならなかったんだ。

これ、チュートリアルサイトのコピペだから気付いたけど、自分で書いたコードだったら相当はまっていただろうなあ。


MVCだとナビゲーションバー上のボタンはどこに書くの?

MVCデザインパターンを考慮してコードを書こうとしたんだけど、あれ?ナビゲーションバー上のボタンはどこに記述すればいいの?ってなっちゃったんだよ。

ナビゲーションバー上のボタン

↑モーダルビュー的なビューの右上(ナビゲーションバー上)に閉じるボタンとかあるじゃない。ああいうのを記述するのって俺は今までviewControllerクラス内の例えばloadView:にこんな感じで書いてたのよ。
{
    UIButton *closeButton = [UIButton buttonWithType:102];
    [closeButton setTitle:@"CLOSE" forState:UIControlStateNormal];
    [closeButton addTarget:self action:@selector(tappedCloseButton) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *closeButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:closeButton] autorelease];
    self.navigationItem.rightBarButtonItem = closeButtonItem;
}
このボタン関連の記述をCから切り分けて、Vに相当する部分に置こうとしたんだよ。見栄えに関連するのは全てVに置くってことで。
でもさ、ナビゲーションバー上のボタンだからUIViewControllerクラスのオブジェクトの参照が必要になるよね。
Controllerクラス内でVのオブジェクトを作る部分でこんな感じにCの参照を渡すわけ?
{
    View *view = [[View alloc] initWithFrame:frame controller:self];
    self.view = view;
}
まあこれでもいいんだけどなんかしっくり来ないのは俺だけ?そもそもMVCデザインパターンだとVはCの参照なんか知らなくてもいいはずじゃなかったっけ?VからCへのメッセージはdelegateを使うわけで。
受け取ったControllerの参照をretainしておく必要はないとはいえ、なんだかなあって感じ。

うーん、今後人様のコードを見る時に他の人はどうやってるのか注意しておこうっと。




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.