頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


UIColorからRGBを取得する方法、ただしiOS 5以降

UIColorからRGBを得る方法ってあるんだねってお話だよ。

コード内部で色の情報をみんなどうやって持たせてるんだろ?
例えばUIColorとして次みたいに記述するでしょ:
#define MAIN_COLOR [UIColor colorWithRed:0.744 green:0.112 blue:0.330 alpha:1.000] 
こういうのをずらずらーっと用意しとけば管理もラクチンなんだけど、いざ使おうって時に
CGContextSetRGBStrokeColor(context, red, green, blue , 1.0);
こんなのだとRGBの値がいるんだよね。するとUIColorオブジェクトからRGBの各値を取り出す必要があるんだけど、これがどうもすんなりとは行かないんだ。だから俺が書いた昔のコード(ターゲットがiOS 4.0からとか)なんかは使い方によってUIColorじゃない方法:
#define MAIN_COLOR 0x805030
で記述してたりするんだ。間抜けだねえ。手抜きだねえ。

何かないの〜?って探してみたらさ、こんな記事があったんだ。

EZ-NET: UIColor から RGB を取得する : Objective-C プログラミング
あるんじゃない!
[color getRed:&red green:&green blue:&blue alpha:&alpha];
ここでcolorはUIColorオブジェクトだよ。これでRGBとalpha値も取れたよ、ブラボー!これでコードがスッキリするよ!
ただ、このメソッドはiOS 5以降なので注意が必要だけどね。

冷静に考えればcolor.redとかでいいでしょ?って思うんだけどなんでないんだろうね?


線の両端を丸くする方法

ちょっとした小ネタなんだけどさ、線を描く時にその両端を丸くする方法だよ。

今まで必要がなかったので調べたことがなかったんだけど、必要にせまられたので調べてみたらあったよ。
CGContextSetLineCap(context , kCGLineCapButt);
こういうのがあって指定すりゃいいんだね。このkCGLineCapButtがデフォルトらしいよ。

線の両端を丸くする

コードはこんな感じで。
    float xx = 20.f;
    float yy = 100.f;
    
    CGContextSetLineWidth(context, 20.f);
    CGContextSetRGBStrokeColor(context, 1.f, 0.7f, 0.5f , 1.0);

    CGContextSetLineCap(context , kCGLineCapButt);//default
    CGContextMoveToPoint(context, xx, yy);
    CGContextAddLineToPoint(context, xx+100, yy);
    CGContextStrokePath(context);
    
    
    CGContextSetLineCap(context , kCGLineCapRound);
    CGContextMoveToPoint(context, xx, yy+30.f);
    CGContextAddLineToPoint(context, xx+100, yy+30.f);
    CGContextStrokePath(context);

    
    CGContextSetLineCap(context , kCGLineCapSquare);
    CGContextMoveToPoint(context, xx, yy+60.f);
    CGContextAddLineToPoint(context, xx+100, yy+60.f);
    CGContextStrokePath(context);

こういうのがなけりゃ自分で処理しないといけないな、面倒だなって思っていたから助かったよ。


貝の中からカニが出る?

この前あさりの砂抜きしてたんだけどさ、いざ調理しようとしたらなぜかカニがいたんだ。

あさりの中にいた(?)カニ1

あさりの中にいた(?)カニ2

一つだけ動きの悪い半開きの貝がいたからその中に隠れていたのかな、なんて思ったけど普通に考えたら買った時に単にあさりと一緒にやってきたのかもしれないな。
見た目はカワイイんだけどやっぱりびびちゃってさ、結局食べなかったよ。


NSStringの文字列から特定の部分を取り出す方法

タイトル通りの小ネタなんだけどさ、substringWithRange:なんてメソッドがいいねってお話だよ。

NSString *string = @"20120510";
なんて文字列があるとするね。これは年月日を想定してるけどなんでもいいんだ。
こういう文字列から任意の部分の文字列を取り出そうとしたんだけど、「赤ちゃんの成長グラフ」アプリではNSStringクラスの
getCharacters:range:
ってメソッドを使っているんだ。よく見ると
- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange
って形で使うわけだけど、unicharってなんだよ、って感じじゃない?見よう見まねで使っていたんだけど、よくよくリファレンスを見たら
substringWithRange:
ってメソッドもあるんだ。
- (NSString *)substringWithRange:(NSRange)aRange
こちらは見ての通りNSRangeを指定して、返り値が文字列というなんとも理解しやすいメソッドなんだよ。しかも
Available in iOS 2.0 and later.
ってあるってことは最初からこれでよかったのに、何やってたんだろうね?まあ過去の自分は他人と思って気にしないことにしよう。

NSString *day = [string substringWithRange:NSMakeRange(string.length-2,2)];
NSString *month = [string substringWithRange:NSMakeRange(string.length-4,2)];
NSString *year = [string substringWithRange:NSMakeRange(string.length-8,4)];
ということで、↑こんな感じで必要な文字を取り出すことができたよ。


iOS 5.1.1が来たよ

今朝気付いたんだけどiOS 5.1.1が来たね。

iOS 5.1.1詳細

最初の
"画面をロック"ショートカットを使用して撮影される写真にHDRオプションを使用するときの信頼性が向上
って内容が気になるなあ。
俺、iPhone 4Sで写真を撮影する時はHDR使ってるんだ。これホント、キレイに撮れるもんね。

HDR撮影の不具合(ぶれ)

↑でもたまにこんな感じで画像がだぶってることがあったからねえ。今回のアップデートでどうなるのかわかんないけど。

あと、
Safariブックマークとリーディングリストの同期の信頼性が向上
ってのにも期待。iPhone/iPadとMacで妙に時間がかかることがあるなと思っていたんだよ。
今試してみたけど、、、あまり変わっていないかな?




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad

FC2ブログ