http://download.csdn.net/source/2802590 (增加工具栏,可选择绘制长方形、椭圆等)
创建应用程序
- QuartzFunView (Subclass of UIView)
- Constants.h (Empty File)
- UIColor-Random (Subclass of NSObject)
UIColor-Random :生成随机颜色
在UIColor-Random.h中定义一个静态的randomColor方法,并在UIColor-Random.m中进行实现:
+(UIColor *)randomColor
{
static BOOL seeded = NO;
if
(!seeded) {
seeded =
YES;
srandom(time(NULL));
}
CGFloat red =
(CGFloat)random()/(CGFloat)RAND_MAX;
CGFloat blue =
(CGFloat)random()/(CGFloat)RAND_MAX;
CGFloat green =
(CGFloat)random()/(CGFloat)RAND_MAX;
return [UIColor colorWithRed:red
green:green blue:blue
alpha:1.0f];
}
备注:srandom(time(NULL))的作用是什么呢?由于random()是按照时间有顺序地产生随机数的,每次应用程序开始,时间都会重置。故会出现每次开启应用程序,随机数虽然是随机的,但是顺序是固定的。srandom(time(NULL))正是让random()生成的随机数在每次启动程序时无顺序。
至于RAND_MAX,它是系统的宏,根据机器的不同有所不同。一般来说,16位的机器RAND_MAX的值是32767,32位的则是2的32次方减1。
Constants:定义颜色枚举
typedef enum {
kRedColorTab =
0
,kBlueColorTab
,kYellowColorTab
,kGreenColorTab
,kRandomColorTab
}
ColorTabIndex;
实现QuartzFunView
导入Constants.h头文件,声明以下变量:
CGPoint firstTouch;
CGPoint lastTouch;
UIColor
*currentColor;
Boolean useRandomColor;
完成QuartzFunView.h之后,继续完成QuartzFunView.m的方法:
- 由于从nib加载对象实例时,init:和initWithFrame:都不会调用,而是调用initWithCoder:。我们在initWithCoder中添加初始化代码。
- 当用户手指第一次触摸屏幕时会调用touchesBegan:withEvent: 在该方法中,若用户之前已经选择了某个随机颜色,则我们需要更改此颜色。之后,我们存储当前位置,这样就可以知道用户第一次触摸屏幕的位置,并指出:需要通过在self上调用setNeedDisplay来重新绘制视图。
- 当用户在屏幕上拖动手指时会连续调用touchesMoved:withEvent:方法。此处,我们所要做的就是将新位置存储在lastTouch中,并指出需要重新绘制该屏幕。
- 当用户将手指从屏幕上抬起时会调用touchesEnded:withEvent: 就像在touchesMoved:withEvent:一样。
更新QuartzFunViewController
QuartzFunViewController是Xcode自动生成的文件,在它里面要实现:根据用户点击而变换颜色的方法。
- (IBAction)changeColor:(id)sender {
UISegmentedControl *control =
sender;
NSInteger index = [control
selectedSegmentIndex];
QuartzFunView *quartzView = (QuartzFunView
*)self.view;
switch (index) {
case
kRedColorTab:
quartzView.currentColor = [UIColor
redColor];
quartzView.useRandomColor =
NO;
break;
case
kBlueColorTab:
quartzView.currentColor = [UIColor
blueColor];
quartzView.useRandomColor =
NO;
break;
case
kYellowColorTab:
quartzView.currentColor = [UIColor
yellowColor];
quartzView.useRandomColor =
NO;
break;
case
kGreenColorTab:
quartzView.currentColor = [UIColor
greenColor];
quartzView.useRandomColor =
NO;
break;
case
kRandomColorTab:
quartzView.useRandomColor =
YES;
break;
default:
break;
}
}