忍者ブログ
  • 2024.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
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 21:50 】 |
CoreGraphics描画命令いろいろ
描画命令のいろいろを書いていきます。

コンテキストを表すctxはCGContextRef型の変数.
色を表すr,g,b,aはCGFloat. 0.0~1.0で指定。
widthはCGFloat.
その他はenumなど。


///////////////
色指定・線の色
CGContextSetRGBStrokeColor(ctx, r, g, b, a);

///////////////
色指定・塗りつぶし色
CGContextSetRGBFillColor(ctx, r, g, b, a);

///////////////
線の太さ指定
CGContextSetLineWidth(ctx, width);
PR
【2011/03/18 18:23 】 | iPhone | 有り難いご意見(0) | トラックバック()
CoreGraphicsで自前のコンテキストを使う
CoreGraphics描画の詳細。

大まかな流れは前回の記事参照。


////////////////////////////////
コンテキストを自分で作成する

カレントコンテキストはもともとあるので、そこに直接描画すれば画面に表示することはできる。
しかし、自分でコンテキストを作ることももちろんできる。


ファイルSimpleCoreGraphicsView.h

@interface SimpleCoreGraphicsView : UIView {
CGContextRef ctxCanvas_;
void *dataCanvas_;
CGSize sizeCanvas_;
}
@end

【2011/03/18 17:17 】 | iPhone | 有り難いご意見(0) | トラックバック()
5分でCoreGraphicsで描画する
CoreGraphicsで描画するまでの流れ。
5分あればイケます。

【2011/03/18 16:44 】 | iPhone | 有り難いご意見(0) | トラックバック()
iPadアプリにする方法
普通にXCodeでアプリを作っていると、iPhoneアプリケーションになります。
iPad実機やiPadシミュレータで動かした場合、iPhoneサイズの画面での表示になります。(右下に、2倍表示のボタンがある)

iPadで動くアプリケーションにしたい場合は、プロジェクトの設定を変更する必要があります。

---
プロジェクト→プロジェクト設定を編集
でプロジェクト設定ウィンドウを開き、

ビルドタブ→Deployment→Targeted Device Family
の項目を選択します。

この項目は以下のどれかを選択します
iPhone
iPad
iPhone/iPad


【2011/01/23 14:28 】 | iPhone | 有り難いご意見(0) | トラックバック()
ファイルの読み書き
ファイルへの読み書きの方法はいくつかあります。
ここには、一番簡単な方法を書きます。

//書き込み
bool saveData(void *pData, uint32_t lenData, const char *fileName)
{
//正確なファイルパスを作成
NSString* filePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%s", fileName]];

//書き込むバイト列をNSData型(またはNSMutableData)に変換
NSData *data = [NSData dataWithBytes:pData length:lenData];

//NSDataをファイル書き込み
BOOL ret = [data writeToFile:filePath atomically:YES]; //引数については後述

return ret;
}


//読み込み
const void *loadData(const char *fileName)
{
//正確なファイルパスを作成
NSString* filePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%s", fileName]];

//ファイルマネージャの取得
NSFileManager *fileManager = [NSFileManager defaultManager];

//ファイルが存在するか確認
if ([fileManager fileExistsAtPath:filePath]) {

//ファイルが存在するなら、その中身をNSData型で取得
NSData *loadedData = [NSData dataWithContentsOfFile:filePath];

//NSDataから生のバイト列に戻す。ここが忘れがちなので注意
const void *bytes = [loadedData bytes];

return bytes;
}
return NULL;
}
 
【2011/01/06 01:09 】 | iPhone | 有り難いご意見(0) | トラックバック()
UIApplicationDelegateプロトコル
UIApplicationDelegateプロトコルの主要なメソッドの解説


普通、***AppDelegate.mとして自動的に作られている


前説
background, foregroundはiOS4以降に出てきた概念。
アプリを実行中にホームボタンを押すと、background状態に移行する
active, inactiveはiOS4以前からある。
電話がかかってきてアプリを一時中断したときなどにinactiveになる。

backgroundは、inactiveである。(逆は成り立たない)
backgroundの間は、ユーザからは見えない。inactiveの間は、操作はできないが見えている可能性があり、描画はしている必要がある。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
アプリの起動時に呼ばれる
似た関数にapplicationDidFinishLaunching:もあるが、推奨されていないとのこと

- (void)applicationWillResignActive:(UIApplication *)application
アプリがアクティブ状態から非アクティブ状態になるとき呼ばれる
電話が来て中断したり、ホームボタンを押してアプリが裏にいったとき
ゲームを一旦停止する処理を書く
非アクティブ状態のアプリは、実行はされているが、どのResponderもイベントを受け取らない。

- (void)applicationDidBecomeActive:(UIApplication *)application
アプリがアクティブ状態になるとき
ゲームを再開する処理を書く

- (void)applicationWillTerminate:(UIApplication *)application
アプリが終了するとき。メモリ上から完全に消し去る
ゲームの終了処理を書く
5秒以内に済ませられないと、システムに強制的にキルされる。
iOS4より前なら、ホームボタンを押したときに呼ばれる。
iOS4以降なら、基本的に呼ばれることはない。backgroundで実行し続けるから。ただしシステム(iPhone)が終了したときには呼ばれる。

- (void)applicationDidEnterBackground:(UIApplication *)application
iOS4以降。
アプリがバックグラウンドに入ったとき。(ホームボタンを押したとき)
描画に関係のない処理
これが呼ばれる前には、applicationWillResignActiveが呼ばれている

- (void)applicationWillEnterForeground:(UIApplication *)application
iOS4以降。アプリを選択したとき
このあとには必ず applicationDidBecomeActive が呼ばれる



流れ

起動
application:didFinishLaunchingWithOptions:
applicationDidBecomeActive
ホームボタン押す(バックグラウンドへ)
applicationWillResignActive
applicationDidEnterBackground
アプリアイコン押す(フォアグラウンドへ)
applicationWillEnterForeground
applicationDidBecomeActive
電話受信、実行中アプリ表示、アラート表示など(非アクティブへ)
applicationWillResignActive
電話終了、実行中アプリ表示の終了、アラート消去など(アクティブへ)
applicationDidBecomeActive
実行中アプリから消去

--落ちた。なぜ ← 落ちた理由はこれ


【2010/12/23 12:06 】 | iPhone | 有り難いご意見(0) | トラックバック()
iPhone加速度センサ
iPhoneの加速度センサの使い方です。


○使い方

1.
delegateとするクラスに
<UIAccelerometerDelegate>プロトコルを使います。

2.
加速度センサを有効にしたいタイミングで
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0 / 60.0];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
と記述。
この場合、60分の1秒ごとに加速度を検出し、selfにメッセージが送信されることになります。

3.
以下の関数を実装。
-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration*)acceleration
60分の1秒ごとに呼ばれます。
UIAccelerationクラスのaccelerationのメンバx,y,zに加速度の方向が入っています(後述)。

4.
終了時には、delegate指定を削除すればOKです。
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];



○加速度の向きについて
加速度の方向とは、通常は重力の方向が検知されます。iPhoneを思いっきり振るなどした場合は、振った方向の逆向きに加速度が働いたように検知されます。

iPhoneの座標系は、画面左から右を+x方向、ホームボタンから電源ボタンの方向を+y、画面の表方向を+zとした向きに軸が指定されています。

【2010/12/05 22:48 】 | iPhone | 有り難いご意見(0) | トラックバック()
<<前ページ | ホーム |