setNeedsDisplayInRect(quartz2d,iPhone)存在问题
我写了一个函数,每2秒在一个随机位置绘制x个正方形。正方形不能在同一位置绘制两次。应用程序完成一个周期后,将填写表格。现在,当绘制的正方形数时,这很好,我不知道为什么这会起作用;在我看来,您所有的-setNeedsDisplayInRect:调用都将合并到一个更新中。我猜你会喜欢每个方块一个接一个的出现 如果是这种情况,您需要给操作系统时间来循环其事件循环(这些调用只会在当前事件循环之后强制屏幕更新)setNeedsDisplayInRect(quartz2d,iPhone)存在问题,iphone,quartz-2d,drawrect,Iphone,Quartz 2d,Drawrect,我写了一个函数,每2秒在一个随机位置绘制x个正方形。正方形不能在同一位置绘制两次。应用程序完成一个周期后,将填写表格。现在,当绘制的正方形数时,这很好,我不知道为什么这会起作用;在我看来,您所有的-setNeedsDisplayInRect:调用都将合并到一个更新中。我猜你会喜欢每个方块一个接一个的出现 如果是这种情况,您需要给操作系统时间来循环其事件循环(这些调用只会在当前事件循环之后强制屏幕更新) 您应该将循环移动到一个单独的方法中,并使用-performSelector:withObjec
您应该将循环移动到一个单独的方法中,并使用-performSelector:withObject:afterDelay:,或NSTimer调用它。该死的,就是这么简单。我花了好几个小时调试它,谢谢你的智慧。
- (void)drawRect:(CGRect)rect {
int count = [writeSquares count];
CGContextRef context = UIGraphicsGetCurrentContext();
int radius = 4;
for (int i = 0; i <count; i++)
{
Square *square = [writeSquares objectAtIndex: i];
CGContextSetLineWidth(context, 1);
//CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetFillColorWithColor(context, [square color].CGColor);
CGContextMoveToPoint(context, CGRectGetMinX([square squareRect]) + radius, CGRectGetMinY([square squareRect]));
CGContextAddArc(context, CGRectGetMaxX([square squareRect]) - radius, CGRectGetMinY([square squareRect]) + radius, radius, 3 * M_PI / 2, 0, 0);
CGContextAddArc(context, CGRectGetMaxX([square squareRect]) - radius, CGRectGetMaxY([square squareRect]) - radius, radius, 0, M_PI / 2, 0);
CGContextAddArc(context, CGRectGetMinX([square squareRect]) + radius, CGRectGetMaxY([square squareRect]) - radius, radius, M_PI / 2, M_PI, 0);
CGContextAddArc(context, CGRectGetMinX([square squareRect]) + radius, CGRectGetMinY([square squareRect]) + radius, radius, M_PI, 3 * M_PI / 2, 0);
CGContextClosePath(context);
CGContextFillPath(context);
//NSLog(@"x = %f x = %f", CGRectGetMaxX([square squareRect]), CGRectGetMinX([square squareRect]));
}
//NSLog(@"Count %i", [writeSquares count]);
[writeSquares removeAllObjects];
-(void)drawInitializer:(int) counter{
if(extra != 0) {
[self setNeedsDisplay];
[grid removeAllObjects];
[self calculateGrid];
counter = counter + extra;
clear = YES;
extra = 0;
}
for(int i=0; i<counter; i++) {
int count = [grid count];
NSLog(@"counter %i", count);
if(count != 144) {
srandom(time(NULL));
int r = random() % [coordinates count];
Coordinate *coordinate = [coordinates objectAtIndex:r];
Square *square = [Square new];
[square setSquareRect: CGRectMake ([coordinate x] * 25, [coordinate y] * 25, 20, 20)];
[square setColor: [UIColor randomColor]];
[writeSquares addObject:square];
[grid addObject:square];
[square release];
[self setNeedsDisplayInRect:CGRectMake ([coordinate x] * 25, [coordinate y] * 25, 20, 20)];
[coordinates removeObjectAtIndex:r];
[coordinate release];
}
else {
extra++;
}
}
//[newlock release];