我正试图把我自己的意见放在可可的NSPathControl
上。为什么空的drawRect会干扰简单的动画?
在出价找出处理,当你鼠标悬停在控制组件,我组建了一个非常简单的示例应用程序,你得到了扩大合同动画的最佳方式。起初事情进展顺利 - 鼠标移入或移出包含路径成分的观点和你使用下面的代码得到一个简单的动画:
// This code belongs to PathView (not PathComponentView)
override func mouseEntered(theEvent: NSEvent) {
NSAnimationContext.runAnimationGroup({ (ctx) -> Void in
self.animateToProportions([CGFloat](arrayLiteral: 0.05, 0.45, 0.45, 0.05))
}, completionHandler: {() -> Void in
//
})
}
// Animating subviews
func animateToProportions(proportions: [CGFloat]) {
let height = self.bounds.height
let width = self.bounds.width
var xOffset: CGFloat = 0
for (i, proportion) in enumerate(proportions) {
let subview = self.subviews[i] as! NSView
let newFrame = CGRect(x: xOffset, y: 0, width: width * proportion, height: height)
subview.animator().frame = newFrame
xOffset = subview.frame.maxX
}
}
如在控制的下一步发展,而不是使用NSView
我的路径组件实例,我开始用自己的NSView
子类:
class PathComponentView: NSView {
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
}
}
虽然基本相同NSView
,当我在动画中使用这个类,动画不再做什么它应该是 - 我的设置框架子视图几乎被忽略,整个ef功能很难看。如果我注释掉我的子类的drawRect:
方法,事情就会恢复正常。任何人都可以解释发生了什么问题?为什么存在drawRect:
干扰动画?
我在我的GitHub页面上放了一个demo project。
感谢您提供这样一个详细,知识丰富的答案。据了解,我删除了直接操作该图层的任何代码。实际上,一旦我完成了这个工作,我仍然遇到问题,但被告知这个问题与我处理图层有关,我回头看了一下我用作模板的项目(''DMPathControl'' )。我注意到,* DM *将类似视图的''layerContentsRedrawPolicy'设置为''.OnSetNeedsDisplay''(默认为'DuringViewResize''),一旦我改变了这些事情,就像预期的那样开始工作。 –