【发布时间】:2009-12-18 17:43:46
【问题描述】:
我正在制作一个 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 个);但我认为这不是问题。
我想知道这可能是什么原因?这个问题很难展示具体的代码示例,但欢迎一些提示或可能的猜测。
【问题讨论】:
-
如何执行拖动?仅使用 mouseDown: 消息还是使用 mouseDown:、mouseDragged: 和 mouseUp: 消息或其他解决方案?
-
嗨 Laurent,我正在使用 mouseDown、mouseDragged 和 mouseUp。
标签: objective-c cocoa macos core-animation