gpt4 book ai didi

iOS setNeedsDisplay 在多个地区

转载 作者:行者123 更新时间:2023-11-28 19:18:06 25 4
gpt4 key购买 nike

我有一个自定义 View ,其中绘制了一个钢琴键盘。每个键都作为单独的调用绘制,因此我只能绘制需要重绘的键。该 View 支持多点触控,因此可以同时按住多个键。

每个键的绘制成本都有些高,因此每当在 View 上检测到触摸时,我都会将特定区域传递给 setNeedsDisplay,以避免重新绘制整个 View (这会产生明显的延迟)。

为了处理多个触摸,我遍历接收到的触摸集,检查每个触摸是否在其中一个键内,如果是,更新它并使用该键的矩形调用 setNeedsDisplay。简而言之,setNeedsDisplay 在一个函数中被多次调用,但每次都使用不同的矩形。

我预期的行为是 drawRect 会在不同的脏区域被多次调用,但是,似乎如果我同时按下最左边和最右边的键,整个 View 都会被重绘,而不仅仅是重绘最左边和最右边的键(如中间的所有键都不必要地重绘)。

我可以做些什么来实现我想要的?我只想绘制被触摸的键,而不是两个脏键之间的所有键。

最佳答案

无论您调用了多少次setNeedsDisplayInRect:,系统都会在主运行循环的每一轮向您发送一个drawRect: 消息。它传递给您一个矩形,它至少是您传递给 setNeedsDisplayInRect: 的所有脏矩形的“联合体”。系统无法准确找出哪些矩形已传递给 setNeedsDisplayInRect:

您可以覆盖 setNeedsDisplayInRect: 以保留脏矩形数组(您会发现 +[NSValue valueWithCGRect:] 很有用),并清除 中的数组>drawRect:.

您可以创建自己的 setNeedsDisplayForKey: 方法来保存脏键数组并调用 setNeedsDisplay

关于iOS setNeedsDisplay 在多个地区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com