2014年7月26日土曜日

【開発】vimの矩形選択でラクラク編集!!

Vimとは高機能エディタとしてエンジニアにとても人気の高いエディタです。

その機能の一つが「矩形選択(ctr + v)」!!

例えば、下記のようなコードがあるとします。

hogeName01 = "aaa";
hogeName02 = "bbb";
hogeName03 = "ccc";
hogeName04 = "ddd";
hogeName05 = "eee";

このhogeの部分が実はfooでしたとなった場合、どうしますか?

back spaceで消してfooを書いてカーソルを下に移動して・・・・(繰り返し)

上記は貴重な時間の無駄使いです。。
こんな時に使えるのが矩形選択(ctr + v)です。

1. hogeの先頭にカーソルを移動
2. ctr + v (矩形選択でhogeをカーソル移動で囲む)
4. d (hoge削除)
5. ctr + v (矩形選択で行数分下にカーソルを移動)
6. shift + I (←ここがミソ!)
7. fooを入力
8. escで入力モードから外れる

すると、hoge->fooへ!
fooName01 = "aaa";
fooName02 = "bbb";
fooName03 = "ccc";
fooName04 = "ddd";
fooName05 = "eee";

ブログで説明するのが困難だわ・・・
ぜひ、実際にお試し下さい。m(__)m

以上!!

2014年7月25日金曜日

【変換】eps -> png 一括変換!

epsファイルを一括でpngに変換する方法!

巷には色々な方法があるようですが、
「ImageMagick」を使った方法を紹介します。

参考URL:
http://naganegi0505.hatenablog.com/entry/2013/01/28/173302

手順:
1.Xcodeをインストール(省略)

2.MacPortsをインストール

■まずはパッケージをダウンロード
https://distfiles.macports.org/MacPorts/
※MacPorts-2.3.1-10.9-Mavericks.pkgをダウンロードしました。

■環境変数にパスを通す。
ターミナルを開いて
cd                                  <-ユーザーのホームディレクトリに移動
vim .bash_profile           <-.bash_profileをvimエディタで開く。初期は.bash_profileはない

■.bash_profileに下記を記述
export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

■確認
source .bash_profile

■MacPortsをアップデート
sudo port -d selfupdate
sudo port -d sync

■ImageMagickをインストール
sudo port install ImageMagick

3.espファイルがあるディレクトリに移動して下記コマンドを実行

mogrify -density 100 -format png -geometry 640x427 *.eps

-formatで拡張子を指定。png jpg bmp

-geometryでイメージサイズを指定 640x427

イラストレーターやGIMPなどのバッチで作る方法もありますが、エンジニアからしたらコマンドラインで一括で変換出来る方が良いですね!!

以上!!

2014年7月21日月曜日

【開発】UITableView,UICollectionViewのCellからIndexPathを知る方法!

開発していて現在表示されているCellだけ更新した場合がある。
その場合、下記で取得できる。


[self.collectionView visibleCells]

だが、さらにIndexPathがわからないと更新できない。

CellからIndexPathを知りたい場合は下記で

[self.collectionView indexPathForCell:cell]

そして更新する場合は下記です。

[self.collectionView reloadItemsAtIndexPaths:indexPaths]


これらを組み合わせて下記のようなメソッドを書いてviewDidAppearとかで呼んでます。

-(void)allCellReload
{
    NSMutableArray * indexPaths = [NSMutableArray new];
    for (UICollectionViewCell * cell in [self.collectionView visibleCells]) {
        [indexPaths addObject:[self.collectionView indexPathForCell:cell]];
    }
    [self.collectionView reloadItemsAtIndexPaths:indexPaths];
}

以上!!

2014年7月12日土曜日

【開発】iosアプリで複数人で開発したい!

会社で開発を行っていると複数のメンバーで開発することは当たり前になってきてます。

もちろんgitを使ってソースコードを管理してますが、
サーバーのアドレスを定数で記述していて各々のメンバーの開発環境に向き先を保持させたい場合にgitが毎回コンフリクトしてしまいますね。

本番環境と開発環境は
#ifdef DEBUG
#define URL             @"http://dev/api"
#else
#define URL             @"http://honban/api"
#endif
こんな感じに振り分けてますが・・・
メンバーの数だけ分けるにはどうすれば・・・><;

と悩んでいたら隣の方にEditSchemaに記述して読む方法を伝授して頂きました。

・プロジェクトをクリックしEdit Schemaを選択。


・ArgumentsタブのEnvironment VariablesにURLを追加します。

ここに記述した値はGitにも含まれないようです。(どこに保持しているのかわかりません。^^;)

ですがUSBケーブルを抜くとEditSchemaの値を見てくれないようです。
当分はこの方法で抜く場合は各メンバーの開発環境に書いてしまえば良しとしときます。

みなさん、どのようにしているのでしょうか?
良い方法あれば教えて下さい。m(__)m

以上!!

【開発】最前面にViewを表示したい!


UIを作成していて、最前面にダイアログを表示したい場合ありませんか?
UIAlertViewを使用しても良いのですが、自分でオリジナルのビューを作ることもあるかと思います。

ただ単にUIViewControllerにaddSubViewだと最前面にならない場合がありますし。。。

そんな時はwindowにaddSubViewしたいのですが、オブジェクトの取得にどうすればいいの悩んだので調べたところ下記のように取得するようです。

UIWindow *window = [[UIApplication sharedApplication].delegate window];

[UIApplication sharedApplication].delegateでAppDelegateを取得している事に気づいたかと思います。
UIApplicationはシングルトンクラスでsharedApplicationでどこでも取得できるみたいですね。
AppDelegateのインスタンス変数も取得出来ますので色々と便利です。

以上!!

【開発】Blockの強参照

ios開発を行っているとよく使うBlock。

Blockとは無名関数と言うやつです。

Block内でよくselfを呼び出してしますのですが、Block内でselfを呼び出すと強参照(strong)となり開放されないということを最近知りました。

Block内でselfなどクラスのインスタンスオブジェクトを呼び出す場合は一旦weakでインスタンスを作成し使用しましよう。

__weak HogeClass * weakSelf = self;


メモリ落ちが頻発してから気づくとかなりの箇所で修正が必要となり大変な事になりますので、なるべくBlockを使用する時は気をつけましょう!

以上!!

【初投稿!】 ios 開発ブログ

はじめまして、iosエンジニアの李です。

日頃の備忘録メモと
詰まった、ハマったなどの共有を目的に

iosアプリ、サーバーサイドの開発ブログをこれから書いていこうと思います。

まだまだ、未熟者でありますので、
間違いなどありましたら、ご指摘頂けると助かります。m(__)m