我有一个自定义视图,其中有一个钢琴键盘。每个键都作为单独的调用绘制,因此我只能绘制需要重绘的键。该视图支持多点触控,因此可以同时按住多个键。
每个键的绘制都有些昂贵,因此每当在视图上检测到触摸时,我都会将特定区域传递给 setNeedsDisplay 以避免重新绘制整个视图(这会产生明显的延迟)。
为了处理多个触摸,我遍历接收到的触摸集合,检查每个触摸是否在一个键内,如果是,更新它并使用该键的矩形调用 setNeedsDisplay。简而言之,在一个函数中多次调用 setNeedsDisplay,但每次使用不同的 rect。
我期望的行为是 drawRect 将被调用多次不同的脏区域,但是,似乎如果我同时按下最左边和最右边的键,则重新绘制整个视图,而不仅仅是最左边和最右边的键(如中间的所有键都被不必要地重绘)。
我能做些什么来实现我想要的?我只想绘制被触摸的键,而不是两个脏键之间的所有键。