【问题标题】:Drawing NSView's subviews manually手动绘制 NSView 的子视图
【发布时间】:2012-12-11 19:43:44
【问题描述】:

我正在编写一个自定义 NSView,它需要在绘制子视图之前应用 NSAffineTransformation 为其子视图设置动画。

我正在寻找一种方法来绘制视图的子视图,以便我可以覆盖它 以这样的方式:

-(void)drawSubview:(NSView*)subview {
    [[NSGraphicsContext saveGraphicsState];
    [[self affineTrasformForSubview: subview] concat];
    [subview drawRect: subview.bounds];
    [[NSGraphicsContext restoreGraphicsState];
}

有什么建议吗?

【问题讨论】:

  • 你真正想要达到什么目的?
  • 每个子视图自己负责绘制;您的 NSView 子类无法控制它们的操作。
  • @Jay 我想在创建自定义动画之前应用转换。也许可以通过图层来做到这一点?
  • @Ben-Uri 是的,我想这就是您想要做的。有助于了解总体目标,例如:嘿,我想将窗口内容倾斜 90 度,等等。
  • 您可以通过调用setNeedsDisplay来强制子视图(或您自己)重绘。

标签: cocoa drawing core-animation core-graphics nsview


【解决方案1】:

用于旋转:NSView setFrameCenterRotation:angle

用于缩放:NSView scaleUnitSquareToSize:size

除了旋转和缩放之外,您还需要让您的视图成为一个支持图层的图层,并与图层混在一起,即使这违反了苹果的建议。但我不会太担心这一点,我认为值得一试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多