はてなブックマークに追加

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はてなブックマークに追加

サーバ移行のお知らせ

このたび、blogのリニューアルに伴って
サーバをFC2からロリポップへと移行することになりました。

リニューアルサイトはこちらになります。
iPhoneアプリと、そのプログラム

よろしくお願い致します。






スポンサーサイト
はてなブックマークに追加

やられた!ToonCamera !


iPhoneアプリ「ToonCamera」の紹介です。

このアプリは、カメラを通してみえる画像を
リアルタイムでイラスタライズしてくれます。

ToonPaintに続いて、こんな素晴らしいアプリが出てくるなんて。。
できることなら、僕が開発したかった!というのが本音(笑)

画像をイラスト化してくれるアプリとしては、
こちらで紹介したToonPaintが有名です。
ToonPaintは主に人の顔をイラスト調に加工してくれるアプリでした。
今日紹介する、ToonCameraは風景画と相性が良いようです。

あ、手前味噌になっちゃいますが、僕の開発した「ぱすてる」も
パステル調に画像加工ができるので気になった方はぜひどーぞ(笑)
pastel.jpg


さっそく、ToonCameraで撮影した画像をどうぞ☆
始めの3枚は、うちの大学のキャンパスです。

木陰の向こうにウエストウイング
tooncamera.jpg

そこから左を向けばコア&ウエストウイング
tooncamera2.jpg

隔離された場所にはローム記念館
(僕の研究棟ですww)
tooncamera3.jpg

はい、どこの大学か分かる人にはわかりますね。
通称BKCキャンパス。
びわこ(B)くさつ(K)キャンパス(C)という
AKBの前身か?と疑いたくなるようなネーミング。
今年の文化祭は倉木麻衣が来るらしいですよ(笑)


最後に電車で一枚。
tooncamera4.jpg


なんといってもリアルタイムで撮影できるので、
気に入ったショットが非常に取りやすいです。
その分、保存時に解像度がおちてしまうけど、
これは、簡単に解決可能な問題なので、是非対応して欲しいですね。


ご購入はこちらから。
banner.png


はてなブックマークに追加

UIScrollViewの使い方 その5




サイトを移行しました。
iPhoneアプリと、そのプログラム



さて前回(UIScrollViewの使い方 その4)は、
タッチイベントは取得出来るようになったけれども、
スクロールができなくなってしまった、という問題が発生したのでした。

そこで、
・2本指でスワイプしたときには、スクロール動作。
・2本指でピンチイン・アウトしたときには、拡大縮小動作。
・1本指で画面をタッチした場合には座標取得
となるような、プログラムを作ってみましょう。

この方法を用いれば、指が2本の時は画面の拡大縮小移動を行ない、
指が1本であれば線を引くといったような動作が可能になるため、
多くのドローソフトではこのジェスチャが使われているようです。


この機能を実現するためには、
UIScrollViewを継承してオリジナルのScrollViewクラスを作成し、
touchesBegan:withEventメソッドなどをオーバライトする必要があります。

UIScrollView8.jpg

上図で説明すると(何度も、同じ図を使いまわしていますが ^^; )
2本指でタッチされた場合には、通常通りScrollViewの動作を行い、
1本指でタッチされた場合には、スクローズせずに、下のViewにタッチイベントを投げるような、
独自ScrollViewクラスを作成します。今回はMyScrollViewという名前でクラスを作成しました。

MyScrollView.h
@interface MyScrollView : UIScrollView {
}
@end


MyScrollView.m
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if( [touches count] == 1 ){
self.scrollEnabled = NO;
} else {
self.scrollEnabled = YES;
}

if (!self.dragging) {
[self.nextResponder touchesBegan: touches withEvent:event];
}
[super touchesBegan: touches withEvent: event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if (!self.dragging) {
[self.nextResponder touchesMoved: touches withEvent:event];
}
[super touchesMoved: touches withEvent: event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if (!self.dragging) {
[self.nextResponder touchesEnded: touches withEvent:event];
}
[super touchesEnded: touches withEvent: event];

}


ポイントはtouchesBegan:withEventメソッドの最初の5行です。
タップされた指の数によって、スクロールをするかしないかを決定しています。
残りの部分は、レスポンダチェーンの先にあるインスタンスに処理を投げるプログラムです。


ここまでで、タッチされた指の本数によって、
スクロールとタッチ動作を分離するScrollViewクラスが作成できました。
あとは、ViewControllerクラスでこのScrollViewクラスのインスタンスを作成&登録するだけです。

scrollViewController.h
@interface scrollViewController : UIViewController
{
MyScrollView *scrollView;
UIImageView *imageView;
}


scrollViewController.m
- (void)viewDidLoad {
[super viewDidLoad];

scrollView = [[MyScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[self.view addSubview:scrollView];
[scrollView release];

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.jpg"]];
scrollView.contentSize = imageView.frame.size;
[scrollView addSubview:imageView];
[imageView release];

scrollView.contentSize = imageView.frame.size;
scrollView.delegate = self;
scrollView.minimumZoomScale = 0.5;
scrollView.maximumZoomScale = 4.0;
scrollView.delaysContentTouches = NO;
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)_scrollView
{
return imageView;
}

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


viewDidLoadメソッドの3行目から5行目で、
作成したScrollViewクラスのインスタンスを作成し、
Viewに登録しています。
この部分は、これまでIB側で部品を画面上に配置することで行なってきたことを
Xcodeで記述しているだけです。
scrollView.userInteractionEnabled=NO;の行を消した以外は、前回とほとんど同じですね~。
後は、touchesBegan:withEventメソッドなどの中に座標を計算するプログラムを書けば完成です。


プロジェクトファイルをココに置いておきます。
参考にしてみてください。
scroll4.zip

はてなブックマークに追加

iPhoneアプリ・電卓をつくる その3




サイトを移行しました。
iPhoneアプリと、そのプログラム


さて、前回
iPhoneアプリ・電卓をつくる その2
はiPhoneプログラミングの概要だけで終わってしまったので、
今日は、実際にプログラムを書いていきます。

Calc1ViewController.h
@interface Calc1ViewController : UIViewController {
IBOutlet UILabel *label;
int count;
}
-(IBAction) plusButtonPressed;
@end


もういちど、前回のプログラムイメージを再掲します。
ここで、今回のカウンタプログラムの場合、
この図の各部分が何に相当するのかを考えてみましょう。

calc5.jpg

まず、ユーザイベントは「+ボタンの押下」で、
画面更新は、「UILabelの更新」ですね。

そこで、ボタンが押されたときに呼ばれる自作関数plusButtonPressedには
IBActionを付けて定義しています。また、画面更新の対象であるUILabelには
IBOutletをつけて宣言しています。これは、前回の説明通りです。
あとはボタンが押下されたときに呼ばれる関数の中身を実装するだけです。

Calc1ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
count = 0;
}

-(IBAction) plusButtonPressed
{
count++;
label.text = [NSString stringWithFormat:@"%d", count];
}


まずは、何回「+ボタン」が押されたのかを保持する変数
countをヘッダファイルに宣言しておき、viewDidLoad関数の中で初期化します。
基本的にはviewDidLoad関数のなかで変数を初期化するようにしておけば大丈夫です。

最後に、ボタンが押下されたときに呼ばれる関数plusButtonPressedの中身を見ていきます。
まず、countをインクリメントしておき、その値をLabelとして表示するため
stringWithFormatという関数を用いて、int型をNSString型に変換しています。
その結果をlabel.textに代入することで、画面上の表示が更新されます。


さて、もう一度インタフェースビルダーに戻って、
イベントと自作関数、画面更新を関係付けます。
具体的には、上図の青矢印と赤矢印を引く感じですかね~。

まずは、IB(Interface Builder)のCacl1ViewController.xibウインドウから
File's Ownerを選択した状態にします。
calc7.jpg

この状態で、インスペクタをみると
このような状態になっているかと思います。

calc10.jpg

この状態でlabelの右側にある○からViewウインドウのUILabelに向けてドラッグします。
同様に、plusButtonPressedの右側の○から+ボタンに向けてドラッグし、
touch up insideを選択します。

うまくいけば、このようになるかと思います。

calc8.jpg

あとはXcodeに戻ってコンパイル&実行すれば
うまくカウンタが動作するはずです。

ここまでのプロジェクトファイルをここに置いておきます。
Calc1.zip


さてさて、宿題です。
(ゼミ資料を兼ねてるもので・・・笑)
これまでのカウンタプログラムにクリアボタンをつけて、
クリアボタンが押されたときにはカウントを0に戻すようにしてみてください。

こんな感じです。

calc9.jpg

クリアボタンをつけたバージョンのプロジェクトファイルをここに置いておきます。
Calc2.zip



はてなブックマークに追加

iPhoneアプリ・電卓をつくる その2




サイトを移行しました。
iPhoneアプリと、そのプログラム



さて、前回はインタフェースビルダーを用いて、電卓のカウンタのインタフェースを設計しました。
今回は、プログラムをかいていきましょう。

iPhoneプログラミングは、C言語の教科書に載っているような「main関数から始まって・・・」
というようなプログラミングスタイルとは少し異なります。(勿論、厳密にはmainから始まる)

では、どのようなプログラムを書けばいいのか?
図示するとこのようになります。

calc5.jpg

簡単にいえば、iPhoneアプリというのは

1. ユーザが何かをする(ボタン押下、スライダ移動、フィンガジェスチャなど)
2. 対応するプログラムが走る
3. 画面が更新される

この3ステップから成り立っており、
ステップ2を設計することになります。
そう、それだけです。

普通は、アプリにはボタンや、スライダなどが複数配置されているため、
それぞれの部品に対応するプログラムが存在します。
それが、こんな感じ。

calc6.jpg

一番大切なのは、これだけです。
ボタンが押されたときにどうしたいか?それをプログラムに書くだけです。
スライダが動かされたときにどうしたいか?それをプログラムに書くだけです。

オブジェクト指向とか、デリゲートとか、
訳の分からない言葉は置いておいて、大切なのはこれだけです。

ユーザイベントに対して何を行うか?
それをプログラミングするだけです。



そして、

ユーザイベントに対応して駆動される関数にはIBActionをつける。
プログラム実行後、書き換えたいものにはIBOutletをつける。


これが、どこの入門書・入門サイトにも書いていないIBActionとIBOutletの意味です。


さて、なんか長くなってしまったので、今日はこのへんで。
次回こそはカウンタのプログラムを書きたいですね(笑)


開発アプリ

iDOF 色影 ラテアート ぱすてる

プロフィール

hokuson

Author:hokuson
京都在住。iPhoneアプリ「色影」や「iDOF」の開発者。アプリのレビューとかもしてみる。博士後期課程@R大学。ついに就職活動なるものをしなければいけないらしい。誰か雇ってください。笑。

カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カテゴリ
最新コメント
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。