Quartz2D学习手记-入门

2010-11-05  籽藤 

仿照《iPhone3开发基础教程》做了一个Quartz 2D的练手小程序。由于CI/QE没有打开,我的黑苹果连截图功能都使用不了。只得用相机拍下运行结果:
   

源码下载:http://download.csdn.net/source/2809435 (绘制直线)
                 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;
    }
}

PS. 学习网站http://www.bogotobogo.com/iPhone.html

342°/3429 人阅读/0 条评论 发表评论

登录 后发表评论