iPhoneアプリ開発 −タッチで線を描く(1)−

公開日: : iPhone, IT, Mac


 やりたいこと

今回やりたいことは以下の2点。

  • (1) 画面をタッチして、指を動かして線を描きたい。
  • (2) 線の枠と中身で色を変えたい。

1つ目は、画面をタッチして指で線を書きたいということ。
2つ目は、描く線の枠と中身で色を変えたいということ。
本記事では、(1)について書いています。
(2)についての説明は以下。
iPhoneアプリ開発 −タッチで線を描く(2)/枠線を描く− | PPl@ce

 最初にやること

画面をタッチして線を描くので、「画面に指がタッチした」と「タッチした指が動いている」というのを認識しないとはじまりません。
上記、それぞれは「touchesBeganメソッド」と「touchesMovedメソッド」を使って対応します。

//画面タッチ
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    touchPoint = [touch locationInView:タッチ対象(selfとか)];
}

touchPointは画面をタッチした際の座標で、「touchesMovedメソッド」でも使うので、このメソッド内のローカル変数にはしません。

//タッチ移動
<ul>
<li>(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{</li>
</ul>
    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:タッチ対象(selfとか)];
    [line stroke:touchPoint endPoint:currentPoint]; //(*) この中身については後述
    touchPoint = currentPoint;
}

タッチ移動したら、移動した箇所の座標を取得しcurrentPointに入れます。
線を描く処理((*)のところ)をおこなったら、今の座標をtouchPointに入れます。
この処理を繰り返すことによって、線の描画をおこないます。

 (1)のためにやったこと

線の描画をするためにやったことは以下。
(*)の中身になりますね。

//描画する範囲
[viewImage.image drawInRect:CGRectMake(viewImage.frame.origin.x, viewImage.frame.origin.y, viewImage.frame.size.width, viewImage.frame.size.height)];
//(A)線の形状
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetTextDrawingMode(UIGraphicsGetCurrentContext(), kCGTextStroke);
//線の太さ
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 3.0f);
//(B)線の色
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0);
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), startPoint.x, startPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), endPoint.x, endPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
UIImage* line = UIGraphicsGetImageFromCurrentImageContext();
viewImage.image = line;
UIGraphicsEndImageContext();

 (A)線の形状

線を描く上でまず大事なのは、線の形状。
「kCGLineCapRound」にすると角を丸くさせます。 
もし、「kCGLineCapButt」にしていると直線の時はいいですが、カーブのときに線ががくつきます。
この「kCGLineCapRound」にすることによって線を曲げても問題ないようにしています。

 (B)線の色

線の色は、RGBの値をそれぞれ設定することにより、決めることができます。
値を決めるのが面倒な場合は、以下のメソッドを使ってUIColorで値を決めることもできます。

    CGContextSetStrokeColorWithColor(<#CGContextRef c#>, <#CGColorRef color#>)

線の場合は、各メソッドはStrokeを使います。
CGContextSetRGBFillColorとかを使ってしまうと何も設定されないので注意です。

 線の枠色と中身の色をかえる方法

これはまた今度描くことにします。
他の図形の場合、kCGTextFillStrokeをDrawingModeで設定して、CGContextSetRGBFillColorとCGContextSetRGBStrokeColorを設定すれば、枠と中で色が変わります。

ただ、線は図形と違って、枠線のみで書いているので枠線と中身の色を変えることが簡単にできません。
※もし出来るなら誰か教えてくださいー!

 参考

SDKで始めるiPad/iPhoneアプリ開発の勘所(5):Core Graphicsで作るiPad向けお絵描きアプリの基礎 (1/4) – @IT

広告

関連記事

NEC_0882

Facebookで名刺を作ってみた -Mooの名刺作成サービス-

1ヶ月~半月くらい前に話題になっていたMooの名刺作成サービス。 話題になっていた時期に注文した名

記事を読む

no image

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

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

記事を読む

no image

Facebookがちょっとコワイ vol.1 -自分の情報をコントロールできない-

Facebookの最近の広がり方などを見ていて、少々不安を感じたので思ったことをつらつらと書いてみま

記事を読む

no image

CakePHP1.3でスマートフォン対応

CakePHP1.3でスマートフォン対応のためにやったことをメモしておきます。 * 環境 -

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(4) -設定準備-

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

記事を読む

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

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

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

記事を読む

Jenkins + スマホアプリ(1) -スマホアプリ用CI環境を作ってみよう-

前回までは、iPhoneアプリでのCI環境でした。 TestFlightがAndroidアプリにも

記事を読む

スクリーンショット 2012-12-06 15.34.43

iPhoneアプリ開発 -端末がネットワークにつながっているかどうか知りたい-

* やりたいこと アプリがネットに繋がっていなければアラートボックスを表示させたい。 ネットに繋

記事を読む

no image

とりあえず動作させてみよう「PHP+OAuthでTwitterに投稿」(追記あり)

で自動でTwitterに投稿したいと思ったのでTwitter周りについて調べてみた。 * 

記事を読む

popup

jQuery Mobile1.2のPopupを試してみた -写真を表示-

jQuery Mobile1.2の「Popup」を試してみました。 他の機能である「Collaps

記事を読む

広告

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 ↑