How to draw on View in iteration, as i had put the setNeedsDisplay method into infinite while loop
我是 iOS 新手,在循环中绘制视图时遇到问题,这是 MyView.m 类中的 drawRect 方法:
`
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -(void)drawRect:(CGRect)rect { self.backgroundColor = [UIColor blackColor]; x = rand() % (200 - 0) + 0; y = rand() % (200 - 0) + 0; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextBeginPath(context); CGContextMoveToPoint(context, 0, 0); CGContextAddLineToPoint(context, 160+x, 150+y); CGContextAddLineToPoint(context, 160+x, 120+y); CGContextAddLineToPoint(context, 200+x, 200+y); CGContextAddLineToPoint(context, 200+x, 170+y); CGContextAddLineToPoint(context, 250+x, 250+y); CGContextClosePath(context); [[UIColor whiteColor] setFill]; [[UIColor redColor] setStroke]; CGContextDrawPath(context, kCGPathFillStroke); NSLog(@"drawRect x: %d,%d",x,y); } |
`
MyView 作为 xib 中的 subView 添加到 ViewController 中。
这是我在 viewController.m 中的 while 循环:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -(void)buttonClicked:(id)sender { while (TRUE) { NSLog(@"while"); NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(reDraw)object:nil]; [myThread start]; // [NSThread detachNewThreadSelector:@selector(reDraw) toTarget:self withObject:nil]; //[self performSelector:@selector(reDraw) withObject:nil afterDelay:1]; NSLog(@"after sleep"); } } -(void)reDraw { [myView setNeedsDisplay]; } |
buttonClicked 是当我按下按钮启动 while 循环时调用的方法,它迭代 setNeedsDisplay 方法,问题是当我按下按钮时,一切都停止工作接受绘图。按钮保持单击状态,所有其他组件都停止。
当您按下按钮时,您将进入主线程上的无限循环。主线程是完成所有绘图的线程。
基本上,无论出于何种原因,你都不应该让主线程hibernate。
您应该考虑使用