西海岸より

つらつらざつざつと

Objective-C

layerのアニメーションを無効化する方法

UIView上で扱うlayerに対して、変更を加えた場合、自動でアニメーション(暗黙的なアニメーション)がかかってしまう。これを無効化する方法のメモ。 layer追加によるアニメーションを無効化 layerの上にlayerを追加した際に、自動的にアニメーションがかかる…

staticライブラリにカテゴリを含む際に気をつけること

Xcodeのプロジェクトでstaticライブラリを作る場合で、さらにライブラリにカテゴリの実装が含まれる場合には注意が必要です。 リンカフラグに、「-ObjC」を設定 staticライブラリを利用する側のコードで、カテゴリを利用する場合、そのままでは実行のexeファ…

CGImageRefからcontextへの描画方法

UIImageをcontextに描画させる際、以下のようにCGContextDrawImageを使ったコードの場合、imgRefで取り出した際にy軸が逆さになって表示されてしまう。 UIImage *image = [UIImage imageNamed:@"test.png"]; CGContextDrawImage(context, self.frame, image.…

CoreDataで複数のデータモデルをマージして利用する方法

XcodeでCoreDataを用いる場合、データモデル(xcdatamodelの拡張子ファイル)を作成して、編集し、プログラム上から読み込むことになるが、複数のデータモデルをマージして、一つのManagedObjectContextとして扱いたいケースがある。この場合、NSManagedObject…

時間を計測する方法

パフォーマンスチューニングの際に、時間を測定することがよくあるので、メモ。 NSDate *startDate = [NSDate date]; //do something NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:startDate]; NSLog(@"time is %lf (sec)", interval);

iPhoneのデバイス種別を判定する方法

unameを使うと簡単に判別が可能だったりする。 - (NSString *) devicePlatform{ struct utsname u; uname(&u); return [NSString stringWithCString:u.machine encoding:NSUTF8StringEncoding]; } iPhone1,1といった型番を取得でき、以下のように機種が細か…

簡単なprivateなsetterメソッドの実装方法

Objective-Cでは、プロパティの機能で以下のように記述することで、自動にアクセサメソッドを生成してくれるが、セッターは外部から非公開としたい、ということがよくある。 @property(retain) NSArray *array; @synthesize array; ここで、@property(retain…

ドラッグ可能なAlertView

UIKitでは、UIViewを継承することで簡単にタッチイベントを拾い、独自に実装することが可能、ってことでAlertViewもできるか試してみました。 (審査に通るかはとても怪しいので利用しない方がよいと思います) DraggableAlertView.h #import <UIKit/UIKit.h> @interface Drag</uikit/uikit.h>…