ラベル Objective-C の投稿を表示しています。 すべての投稿を表示
ラベル Objective-C の投稿を表示しています。 すべての投稿を表示

2013年7月25日木曜日

【メモ】UIImageViewに描画したイメージのUNDO方法について

UNDOについて
いろいろ考えたんだけれども
結局NSMutableArrayにUIImageView.imageを保存するという方法で
対処する事に


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    
    //canvasの情報を保存する
    //undo用にデータを保存
    if (canvas.image != nil) {
        [imageArray addObject:canvas.image];
    }
}

- (IBAction)undo:(id)sender {
    
    NSLog(@"imageArray.count = %d", [imageArray count]);
    if ([imageArray count] > 0) {
        if ([imageArray count] - 1 == 0) {
            canvas.image = nil;
        } else {
            canvas.image = [imageArray objectAtIndex:[imageArray count] - 2];
        }
        [imageArray removeLastObject];
    }
}


本当に使いやすいUNDOってなんだろうか?
これからもう少し実装しながら考えようと思う。



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();
}


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

2012年7月11日水曜日

【メモ】AppleにiPadアプリを申請してみたらRejectされたメモ

AppleにiPadアプリを申請してみた。

よくわからないままObjective-Cを始めて
delegateにつまづいたりもしたけれどw
なんとか、ここまで来れたよ(感無量)




でRejectされましたw

実はすでに2回目なんだけど、
1回目のRejectはというと。。。

1、デモアカウント(パスワード付きで)が必要
2、いくつか質問があるんだけど。。。
- Is this an existing service? If yes, where is it available?
- Is this app an indispensable part of the service or can the service work without the app?
- Is the service provided in the app iOS only or on multiple platforms? If multiple platform, which ones?
- After the free trial period ends, what are the subscription options? What does the user get, how much does the user have to pay, and what are the payment options? 

って感じ。
デモアカウントをお知らせするのを忘れてました。

2回目のは
1、ログインできないし。。。

よく考えたら日本だけのサービスを考えてたので、
日本以外のIPアドレスはdenyに設定している。。。

とりあえず、連絡してみた。

次どう言われるか。。。

2011年9月6日火曜日

【メモ】Objective-Cでハッシュ関数を使う(SHA256)

Objective-Cでハッシュ関数使う必要が出てきたので調べてみた。


-(NSString*) sha256:(NSString *)text{
 
const char *s=[text cStringUsingEncoding:NSASCIIStringEncoding];
NSData *keyData=[NSData dataWithBytes:s length:strlen(s)];
 
uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};
CC_SHA256(keyData.bytes, keyData.length, digest);
NSData *out = 
      [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
NSString *hash=[out description];
hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
return hash;

}

上のソースを使う為にimportを追加する必要があります。

#import <CommonCrypto/CommonHMAC.h>

2011年7月27日水曜日

【メモ】JSON ArrayでPOST送信する方法(Objective-C)

Objective-C学習中の私は毎日壁にぶつかってばかり。。。

サーバーはJSONICを使ってJSONオンリーでデータの送受信してて、
下の様なデータをサーバーにPOST送信したい時

{
     "date" : "2011/07/27",
     "lang" : "Java",
     "flag" : "true",
     "newspaper" : [
              "朝日新聞",
              "毎日新聞",
              "読売新聞"
     ]
}

クライアントがJavaとかJavascriptだったらやり方が分かるんだけど、
Objective-Cではどうやれば良いのか分からなかったので
色々調べた。

なぜか日本語のサイトに当たらなくて
海外のサイトに答えがのってました。
本当に助かりました。

NSMutableArray *newspaper = [[NSMutableArray alloc] init];
if (isAsahi == YES) {
  [newspaper addObject:@"朝日新聞"];
}
if (isMainichi == YES) {
  [newspaper addObject:@"毎日新聞"];
}
if (isNikkei == YES) {
  [newspaper addObject:@"日経新聞"];
}
if (isYomiuri == YES) {
  [newspaper addObject:@"読売新聞"];
}
if (isSankei == YES) {
  [newspaper addObject:@"産經新聞"];
}

//送信するパラメータの組み立て
NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
[mutableDic setValue:@"2011/07/27" forKey:@"date"];
[mutableDic setValue:@"Java" forKey:@"lang"];
[mutableDic setValue:@"true" forKey:@"flag"];
[mutableDic setValue:newspaper forKey:@"newspaper"];

//JSONに変換
NSString *jsonRequest = [mutableDic JSONRepresentation];

//JSONに変換
NSData *requestData = 
      [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];
 
NSMutableURLRequest *request;
request = 
    [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl] 
    cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

//HTTPメソッドは"POST"
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json"
      forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", 
      [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
 
//レスポンス
NSURLResponse *resp;
NSError *err;
 
//HTTPリクエスト送信
NSData *result = [NSURLConnection sendSynchronousRequest:request 
      returningResponse:&resp error:&err];