首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >强制setNeedsDisplay

强制setNeedsDisplay
EN

Stack Overflow用户
提问于 2013-01-07 07:33:04
回答 2查看 977关注 0票数 0

我有一个使用CoreGraphics和drawRect绘制齿轮的例程。我使用一个按钮在各个阶段推进齿轮:

-(IBAction)advanceButtonPressed:(Id)发送者{

代码语言:javascript
复制
stage=stage+1;

if (stage==4) stage=0;

[self setNeedsDisplay];

}

绘制齿轮的例程是在drawRect中,根据stage的值在新的位置绘制齿轮轮齿,并将其传递给drawRect。在四个步骤中,每按一次按钮,齿轮就转到它的新位置(围绕圆圈的一段)。

我更改了buttonPressed例程,让它在循环中完成这四个阶段,因此我只需要按一次按钮,但它不起作用:

-(IBAction)buttonPressed:(Id)发送者{

代码语言:javascript
复制
for (stage=0;stage<4;stage++){

    NSLog(@"%i",stage);

[self setNeedsDisplay];
}

}

我的NSLog显示stage经历了它的四个值,就像它在前面的例程中一样。但是setNeedsDisplay只执行一次(正如drawRect中的NSLog跟踪所确认的那样),因此齿轮显示在其最终位置,而不是中间阶段。看起来setNeedsDisplay只在按钮例程结束时执行,尽管它在循环中。

有没有办法强制它执行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 07:49:58

无论您多频繁地调用setNeedsDisplay,iPhone每秒只更新屏幕60次。您的循环将在不到1/60秒的时间内执行。这就是为什么你只能看到最后一个状态的原因。

如果您想通过按一下按钮来显示所有四种状态,那么您可以使用计时器或performSelector: afterDelay来显示所有四种状态。有点复杂,但这就对了。

票数 2
EN

Stack Overflow用户

发布于 2013-01-07 07:41:41

调用setNeedsDisplay只会标记要在下一个绘制周期重绘的视图。

要在你的方法中重画它,你可以显式调用drawRect:

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14187961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档