iPhoneアプリ開発 芳名帳アプリ作成(3) -名前を書けるようにする-

公開日: : iPhone, IT


 今までの流れ

 画面構成

今回の芳名帳アプリは以下の画面で構成しています。

  • メイン画面(MainViewController)
  • 設定画面(SettingViewController)
  • 記帳画面(GuestBookViewController)

 記帳画面で名前を書く

利用するのは前回追加した以下の3つのメソッドです。

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 }
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
 }
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
 }

 線を書く

利用するメソッドは以下の時に呼ばれます。

  • touchesBegan:画面にタッチした時
  • touchesMoved:画面にタッチした状態で指が移動している間
  • touchesEnded:画面から指が離れた時

以下の様な方法で、上記の各メソッドが呼ばれた時のタッチ位置が取得出来ます。

 UITouch *touch      = [touches anyObject];
 CGPoint *touchPoint = [touch locationInView:self.view];
[1] タッチした場所を保存
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    touchPoint     = [touch locationInView:self.nameSpace];
 }

UIImageViewであるnameSpaceに線を書くためlocationInViewの対象はself.nameSpaceにしています。

[2] 移動時に移動分の線を書く
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch       = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:self.nameSpace];
    [self draw:touchPoint endPoint:currentPoint];
    touchPoint = currentPoint;
 }

最初にタッチした場所と移動時の場所を利用して線を書きます。

線を書くのは以下の様な感じで書けます。

 - (void)draw:(CGPoint)startPoint endPoint:(CGPoint)endPoint {
	CGRect rect = CGRectMake(0,
                             0,
                             self.nameSpace.frame.size.width,
                             self.nameSpace.frame.size.height);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    //今までの画像を描画
    [self.nameSpace.image drawInRect:rect];
    //線の形
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextDrawPath(context, kCGPathFillStroke);
    //線の色
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
    //線の太さ
    CGContextSetLineWidth(context, 5.0f);
    CGContextMoveToPoint(context, startPoint.x, startPoint.y);
    CGContextAddLineToPoint(context, endPoint.x, endPoint.y);
    CGContextStrokePath(context);
    //画像化
    UIImage *line = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    self.nameSpace.contentMode = UIViewContentModeScaleAspectFill;
    self.nameSpace.image       = line;
    UIGraphicsEndImageContext();
 }

線を書いて画像化して、UIImageViewに置きます。
これにより瞬間の線を書けますが、その都度画像化しているだけでは、今までの履歴がありません。
そこで、最初にdrawInRectで今までの画像を表示することにより、線になります。
これで。名前を書くことが出来るようになりました。

 枠線を表示させる

今のままだと書ける範囲がわかりません。
そこで枠線を表示させます。

以下をimportします。

#import "QuartzCore/CALayer.h"

次に、最初に以下を設定することで枠線を表示させることができます。

    CALayer *layer = [self.nameSpace layer];
    [layer setMasksToBounds:YES];
    [layer setBorderWidth: 3.0f];
    [layer setBorderColor:[ [UIColor blackColor] CGColor] ];

 設定周り

今回実装した部分で以下はカスタマイズできる方が便利です。

  • ペンの太さ・色
  • 枠線の太さ・色

特に枠線の箇所については、太さや色よりも様々な背景画像を用意した方がいいかもしれません。

広告

関連記事

スクリーンショット 2012-10-20 14.26.24

iPhoneアプリ開発 −UITabControllerの利用−

* やりたいこと 上にあるように下部にあるタブをタッチしたら別のページを呼び出す。 * 

記事を読む

no image

TestLink1.91のバグの修正方法

どうやらTestLink1.91にはバグがあるようなので、修正方法を以下に記述。 Test

記事を読む

no image

jQuery Mobileの初期設定 -jQuery Mobieを利用時にページ内リンクさせたい-

* 前提 jQuery Mobileを利用していて、以下のタグを使ってページ内遷移したいことがありま

記事を読む

no image

iPhoneアプリ開発 −フォントの変更−

一言:最近、iPhoneアプリの開発のためMacばかり触ってて、Windowsに戻ると混乱します。

記事を読む

no image

CakePHPのモデルのキャッシュではまった -新しく追加したカラムに値が入らない-

タイトルのとおり、ちょこっとCakePHPではまったのでメモ。 * 作業内容 -MySQLで、ある

記事を読む

no image

アプリのためにFacebookページ作成 -現時点で注意すべき点-

* 前回 会社のメルアドでFacebookページを作成する方法を載せました。 * Faceboo

記事を読む

no image

Jenkins+Capistranoを設定した時にしたこと -「ポート変更」「公開鍵認証」対応-

* 前段階 上記にあるように、Jenkins+Capistranoの設定をしています。 ただし、設

記事を読む

no image

iPhoneアプリ開発 芳名帳アプリ作成(6) -写真に保存-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:title=

記事を読む

no image

さくらのVPSでJenkins -執事さんとご対面-

さくらのVPSを利用している方は多いかと思います。 私も、自分で遊ぶ用(開発用)として借りてみまし

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(1) -最初の一歩-

* 作るアプリ 結婚式や2次会で「自分の名前を書く」芳名帳 これをアプリで作ってみます。

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑