【问题标题】:About cutting of / cropping a uiview关于剪切/裁剪 uiview
【发布时间】:2012-06-03 18:34:58
【问题描述】:

所以我有一个 uiview,它使用一个框架初始化,该框架具有为用户提供的高度和宽度,我希望用户能够在此框架内绘图,但是当用户按下按钮时,我想要view 以切断多余的浪费空间,使框架仅与用户绘制的一样大。我试图做这样的事情

CGRect boundbox = CGPathGetBoundingBox([myPath CGPath]);
boundbox.origin.x = self.frame.origin.x;
boundbox.origin.y = self.frame.origin.y;
self.frame = boundbox;

但是,这并没有消除多余的空间浪费,它只是调整视图的大小,使绘制的内容看起来比以前更小。我想做的是删除 那个“空白”,我在想是否可以扩大 uiview 的内容,但我不确定。

澄清我的意思:

红色边框是用户可以在上面绘制的区域/框架,中间的文字是一幅图画,当用户按下按钮时,我希望框架只包围图画,如图 2 所示。

现在假设我有以下场景,我在屏幕中间画了一个圆圈。

当我按下按钮时,比例保持不变,但圆圈仍然在相同的位置,但我们现在更改了绘图区域,所以圆圈/绘图看起来像图 4 中的截断。

我想要做的是移动绘图/贝塞尔路径,使其位于框架的中间。使红色区域包围蓝色圆圈。

【问题讨论】:

    标签: xcode uiview drawrect bounding-box


    【解决方案1】:

    [编辑] 鉴于你的图纸。当您更改它的 frame 属性(或它的 CGRect)时,UIView 不会重新定位其中的项目。在这种情况下,您需要跟踪自己绘制的项目,然后在按下按钮时自己执行对象翻译。

    这意味着您必须找到最左边的对象,最顶部的对象,然后将所有对象移动该数量,然后向上移动该数量,以便所有对象(作为一个分组)位于顶部-在视图的框架内左对齐。在此之后,您将需要自我识别哪个对象最右边以及哪个对象最底部触摸。

    现在,由于您已经将项目从左上角移动,最右边的点将定义您的框架宽度,最底部的点将定义您的框架高度。

    如果您愿意,您应该可以在完成此操作后使用以下属性进行放大。

    [第一个答案] 如果我正确理解您的问题,您可能仍希望执行框框操作,但如果您希望缩放,则可能需要查看

    contentScaleFactor or
    contentStretch
    

    属性。

    contentScaleFactor 应根据单个浮点值(即 xWidth * scaleFactor、yHeight * 比例因子)缩放两个维度。

    contentStretch 是一个 CGRect,这意味着它应该分别缩放每个维度(轴)。

    【讨论】:

    • 不知道该怎么做,我发现如果我在上面写的代码之后立即调用 setneedsdisplay,我会得到正确比例的绘图,但它就像绘图上下文从右侧被剪切侧面,那是因为调整了框架的大小。我需要做的是移动绘图,使其位于新框架的中心,不知道我应该怎么做:S
    • 画出你想要完成的事情可能有助于获得好的答案。你谈到点击一个按钮会导致你的动作发生。您正在尝试做的事情的全貌是什么?
    • 好的,所以在这种情况下...我将把它扔到答案部分,但你需要做的工作比你现在做的要多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2019-11-14
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多