开发者

Using Quartz to draw every second via NSTimer (iPhone)

I'm relatively new to Objective-C + Quartz and am running into what is probably a very simple issue. I have a custom UIView sub class which I am using to draw simple rectangles via Quartz. However I am trying to hook up an NSTimer so that it draws a new object every second, the below code will draw the first rectangle but will never draw 开发者_如何学Goagain. The function is being called (the NSLog is run) but nothing is draw.

Code:

- (void)drawRect:(CGRect)rect {
    context = UIGraphicsGetCurrentContext();

    [self step:self];
    [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)(2) target:self selector:@selector(step:) userInfo:nil repeats:TRUE];

}

- (void) step:(id) sender {
    static double trans = 0.5f;

    CGContextSetRGBFillColor(context, 1, 0, 0, trans);
    CGContextAddRect(context, CGRectMake(10, 10, 10, 10));
    CGContextFillPath(context);

    NSLog(@"Trans: %f", trans);

    trans += 0.01;
}

context is in my interface file as:

CGContextRef context;

Any help will be greatly appreciated!


Your example won't work. The reason is that drawRect: is called for you when the view requires drawing, and it can't draw on its own.

Instead, try using your timer from outside of drawRect: (viewDidLoad comes to mind), and each time add an object to draw to a list, and call [view setNeedsDisplay] to request it to be redrawn. There are other techniques if you need stricter control, but it's a good idea to master the basics of application flow first.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜