【问题标题】:Scaling drawing done in drawRect when view resizes视图调整大小时在 drawRect 中完成的缩放绘图
【发布时间】:2013-06-07 14:07:56
【问题描述】:

我仍在学习 Cocoa 中自定义视图绘制的一些细节。 我有一个自定义视图,在该视图中,我根据固定大小的其他较大矩形中的相应点绘制线和点。 我希望在调整视图大小时放大或缩小绘图,但保持与较大矩形相同的纵横比。

缩放绘图的最佳方法是什么? 我是否需要以某种方式应用仿射变换? 还是我应该绘制到 imageRef? 我不确定在这种情况下究竟如何做以太一,或者如何使其与视图的大小和坐标来自的较大矩形的纵横比保持同步。 非常感谢任何指向示例代码的提示或链接。

【问题讨论】:

    标签: cocoa nsview drawrect


    【解决方案1】:

    Concatenatingaffine transform 听起来是正确的解决方案。在两个维度上按相同的因子缩放将保留绘图的纵横比,并且您可以使用简单的除法来计算正确的因子(假设您不只是从滑块或其他东西中获取它)。

    如果您还没有,我强烈建议您阅读Cocoa Drawing GuideQuartz 2D Programming Guide。有很多重叠,但解释不是复制和粘贴的,所以如果一个指南对某事的解释没有意义,请在另一个指南中查找并尝试阅读该版本。

    【讨论】:

    • 谢谢。我一直在阅读和重读这些。我已经知道大部分 AppKit 绘图都是围绕 Quartz/CG 绘图的 OOP,但其中一些有点简洁.. :)
    • 我知道如何获得所需的纵横比数字,顺便说一句。它只是找出最佳的缩放和约束方法。我试过简单地使用 NSWindow 方法 setContentAspectRatio: 但这似乎什么也没做......因为我的视图是 contentView 的唯一子视图,并且设置为与内容视图相同的大小和来源。
    • @uchuugaka: setContentAspectRatio:setAspectRatio: 约束窗口大小调整(由用户)。比如说,它不会将帧捕捉到那个纵横比,部分原因是它不知道是否扩大帧、缩小帧、尝试保持相同的区域,或者其他什么——所以它把它留在你的手中程序化调整大小。它也与绘画无关。
    • 是的,我明白了。而与绘图无关的部分。我认为让我大吃一惊的部分是绘制到 NSBitMapRep 以及与之相关的障碍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多