2013年4月26日金曜日

【メモ】UIImageView(canvas)のタッチした場所にUIImageを貼り付ける方法(Objective-C)

iPhoneやiPadアプリの
お絵かきアプリであるような
キャンバス上にタッチしたら画像が重なるアレを考えてみました。

元となる画像(UIImage)に追加する画像(UIImage)を次々と貼りつけて
UIImageViewに表示させるイメージです。

// 画面に指をタッチされた時
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
    // タッチ開始座標をインスタンス変数touchPointに保持
    UITouch *touch = [touches anyObject];
    touchPoint = [touch locationInView:canvas];
    
    UIImage* addImage = [UIImage imageNamed:@"draw_square.png"];

    // 描画領域をcanvasの大きさで生成
    UIGraphicsBeginImageContext(canvas.frame.size);
    // canvasにセットされている画像(UIImage)を描画
    [canvas.image drawInRect:CGRectMake(0, 0, canvas.frame.size.width,canvas.frame.size.height)];
    // 追加するイメージをタッチした座標位置に配置(ここは画像サイズを計算した方がよさげ)
    [addImage drawAtPoint:CGPointMake(touchPoint.x, touchPoint.y)];
    // 描画領域を画像(UIImage)としてcanvasにセット

    canvas.image = UIGraphicsGetImageFromCurrentImageContext();
    // 描画領域のクリア
    UIGraphicsEndImageContext();
}


上の実装でとりあえずは動いたけど、
正しいかどうかはこれからテストしようかと。。。

2013年4月25日木曜日

【メモ】addObserverでエラー(Objective-C)

UIImagePickerControllerのカメラをやめて
AVFoundationを使ってカメラアプリ作ってると以下のエラーが。。。



An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.


調べてみると
addObserverあたりで発生している感じ。

今回の場合は、AVCaptureDeviceのキー値監視をしていたんだけど
Viewを閉じる動作(カメラを閉じる)があったのでremoveObserver文を追加するとうまくいった。


-(IBAction)cancel:(id)sender{
    
    AVCaptureDevice* captureDevice =
    [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    
    [captureDevice removeObserver:self forKeyPath:@"XXXXX"];
    [self.captureSession stopRunning];
    
    self.captureSession = nil;
    [self dismissModalViewControllerAnimated:YES];
}

2013年4月1日月曜日

【メモ】PostgreSQLに使えるデータベース設計ツール「SQL Power Architect」

すでにオープンソースのデータベース利活用が広がりを見せる中で
特にPostgreSQLは面白い存在だと思ってるんだけど、
MySQLと比較すると周辺ツールがどうしても貧弱に見えてしまう。

そんな感じなので、PostgreSQLで使えるMySQL Workbenchのようなツールを探してみたら
「SQL Power Architect(http://www.sqlpower.ca/page/architect)」というツールがあるそうだ。

ダウンロードは↓のサイトでできます。
https://code.google.com/p/power-architect/

早速インストールしてみる。



初回起動時は↓のダイアログが表示されて「PL.INI」というファイルの作成をするように
指示される。ので、「Create」をクリックする。



起動したら、とりあえず「New Connection」でDBに接続してみる。
「Database Type」にPostgreSQLを選択すると入力項目が変化し、ある程度補完してくれる。







対応しているデータベース
  • Oracle8i
  • Oracle9i
  • Oracle10g
  • PostgreSQL
  • SQL Server 2000
  • SQL Server 2005
  • SQL Server 2008
  • MySQL
  • DB2
  • Derby Embedded
  • HSQLDB
  • SQLstream
  • H2 Database


接続が完了すると
スキーマ、テーブルが選択できるようになる。

テーブルをドラッグすることでモデリングも可能になるようだ。

まとめ:
どういう場面で活躍するかはまだまだ未定。。
PostgreSQLも良いけど、MacでSQL Serverを使う機会があるので
まずはクライアントツールとして使ってみようかな??