こちらはCore Graphicsチュートリアル: 曲線とレイヤーからの続きとなります。
アプリを完成させよう!
おめでとうございます!ここまで、やっちゃいましたね!後少し手を加えて完成させちゃいましょうね。感情に合わせて背景色を変化させるにはskyにそれらを反映させる必要があります。感情の変化の値はSkyViewクラスに渡されているので、以下の様に変更して下さい:
drawSkyInRectメソッドを以下に置換えて下さい:
-(void) drawSkyInRect: (CGRect) rect forMode: (NSInteger) mode inContext: (CGContextRef) context withColorSpace: (CGColorSpaceRef) colorSpace
{
UIColor * baseColor = nil;
UIColor * middleStop = nil;
UIColor * farStop = nil;
switch (mode) {
case HAPPY:
baseColor = [UIColor colorWithRed:0/255.0 green:158.0/255.0 blue:183.0/255.0 alpha:1.0];
middleStop = [UIColor colorWithRed:0.0/255.0 green:255.0/255.0 blue:252.0/255.0 alpha:1.0];
farStop = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0];
break;
case SOMEWHAT_HAPPY:
baseColor = [UIColor colorWithRed:0/255.0 green:158.0/255.0 blue:183.0/255.0 alpha:1.0];
middleStop = [UIColor colorWithRed:144.0/255.0 green:152.0/255.0 blue:253.0/255.0 alpha:1.0];
farStop = [UIColor colorWithRed:96.0/255.0 green:111.0/255.0 blue:144.0/255.0 alpha:1.0];
break;
case NEUTRAL:
baseColor = [UIColor colorWithRed:148.0/255.0 green:158.0/255.0 blue:183.0/255.0 alpha:1.0];
middleStop = [UIColor colorWithRed:127.0/255.0 green:138.0/255.0 blue:166.0/255.0 alpha:1.0];
farStop = [UIColor colorWithRed:96.0/255.0 green:111.0/255.0 blue:144.0/255.0 alpha:1.0];
break;
case TICKED_OFF:
baseColor = [UIColor colorWithRed:255.0/255.0 green:147.0/255.0 blue:167.0/255.0 alpha:1.0];
middleStop = [UIColor colorWithRed:127.0/255.0 green:138.0/255.0 blue:166.0/255.0 alpha:1.0];
farStop = [UIColor colorWithRed:107.0/255.0 green:107.0/255.0 blue:107.0/255.0 alpha:1.0];
break;
case RAGING:
baseColor = [UIColor colorWithRed:255.0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
middleStop = [UIColor colorWithRed:140.0/255.0 green:33.0/255.0 blue:33.0/255.0 alpha:1.0];
farStop = [UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
break;
}
CGContextSaveGState(context);
NSArray * gradientColors = @[(__bridge id)baseColor.CGColor, (__bridge id)middleStop.CGColor, (__bridge id)farStop.CGColor];
CGFloat locations[] = { 0.0, 0.1, 0.25 };
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) gradientColors, locations);
CGPoint startPoint = CGPointMake(rect.size.height / 2, 0);
CGPoint endPoint = CGPointMake(rect.size.height / 2, rect.size.width);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGGradientRelease(gradient);
CGContextRestoreGState(context);
} |
次は以下の修正をdrawInRect:で。
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
[self drawSkyInRect:rect forMode:self.rageLevel inContext:context withColorSpace:colorSpace];
[self drawMountainsInRect:rect inContext:context withColorSpace:colorSpace];
[self drawGrassInRect:rect inContext:context withColorSpace:colorSpace];
[self drawFlowersInRect:rect inContext:context withColorSpace:colorSpace];
CGColorSpaceRelease(colorSpace);
} |
それではビルド&ランしてください。スクリーンをスワイプしてください。さて、チャレンジの時間です。

チャレンジ課題
初心者レベルのチャレンジ – これまで学んだ事を使ってオリジナルの描画をしてみましょう。
中級レベルのチャレンジ – スワイプする度に変化する、グラデーションの色の変化がちょっとぎこちないですが、これらの色の変更をスムーズにしてみましょう。
上級レベルのチャレンジ – iPadでも見る事が出来る様にコードを修正してみましょう! これを実現するにはもう1つStoryboardを作成する必要があります。加えてスクロールビューの計算をiPad様のスクリーンの大きさに合わせて変更し、スクリーンサイズを独立させる為に描画コードを変更する必要があります。
これらのチャレンジが完成したら、スクリーンショットをフォーラムに投稿してくださいね。みなさんの上達の成果を是非見せてください。
まだまだ教えて欲しいんだけど?
このチュートリアルに付き合ってくださって本当に有難うございました。今回のチュートリアルのソースコード はこちらからどうぞ。
これでCore Graphicsチュートリアルシリーズは今の所終わりです。これまでの勉強でCore Graphicsの基礎は身についたと思います。後はガンガン使って、メキメキ上達しちゃってくださいね。
Core Graphicsに興味がありましたら、アニメーションも楽しんで頂けるかも知れませんね。やってみたい!とおっしゃる方は、UIViewの使い方チュートリアルをチェックしてください!楽しいですよ。
どうでしたか?このCore Graphicsチュートリアルシリーズを楽しんで頂けましたか?質問やコメントは以下のフォーラムからどうぞ。
このチュートリアルはBrian Moakley氏によって執筆されました。氏はiOS開発者、フィクション作家だけでなく、Razewareの最初のフルタイムメンバーでもあります。Google+やTwitterもチェックして下さい。