我正在制作一个Cocoa应用程序,使用Core Animation创建自定义UI。但是,每当我拖动一些图层时,它们通常会在其他图层上留下一些“残差/痕迹”。
到目前为止,我的猜测是它与我对 [setNeedsDisplay] 的使用有关。据我所知,当我拖动一个图层时,我不需要将该方法调用到该图层(因为该图层中没有更新任何内容)。但留下的残差是在其他层上(所以他们可能需要调用那个方法?但是我怎么知道拖动鼠标经过了哪些层?)
例如,大多数图纸都很简单:
// Block view is a subclass of CALayer
@implementation BlockView
-(void)drawInContext:(CGContextRef)context
{
CGRect bounds = CGContextGetClipBoundingBox(context);
CGContextSetFillColorWithColor(context, color);
CGContextFillRect(context, bounds);
}
@end
然而,有时我有多层次的层次(最多3层);但我不认为这是一个问题。
我很想知道这可能是什么原因?这个问题很难显示特定的代码示例,但欢迎提供一些提示或可能的猜测。
答案 0 :(得分:1)
一个常见的问题是吸引外界。如果您在绘图程序中使用[self frame]而不是[self bounds],则会发生这种情况。
答案 1 :(得分:0)
脱离我的头顶:
答案 2 :(得分:-3)
这是我在UIWebViews中遇到的一个问题。简单地说,Apple代码(奇怪的是)没有bug。我试图隐藏有问题的观点并展示另一个,有点像双缓冲,只有双重观看,如果你愿意,作为解决方法。
如果要在两个位置之间移动(动画)视图,请隐藏一个,然后显示新动画到新位置的动画。回想一下,分析一下,当UIWindow有多个子视图时就会出现问题 - 我现在想知道如果你在几乎顶级的“shell”视图中封装了多个顶级视图,它是否会消失 - 试试那个吗?你的旅费可能会改变。在添加“双重观看”之后,该错误仍然存在一定程度,但由于艺术家出现的时间较短,因此用户对问题的看法明显减少了。