2012-06-03 121 views
1

所以我有一个uiview,它是用具有为用户存在的高度和宽度的框架初始化的,我希望用户能够在此框架内绘制,但是当用户按下一个按钮,我想要视图切断额外的浪费空间,以便框架只与用户绘制的一样大。我试图做这样的事情关于裁剪/裁剪视图

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

然而,这并不会删除多余的浪费的空间,它只是调整大小的观点,从而使绘制的内容看起来比以前小。我想要做的就是删除 那个“空白”,我在想是否可以放大uiview的内容,但我不确定。

为了澄清我的意思:

enter image description here

红色边框面积/框,用户可以借鉴,在中间的文本是一个图,当用户按下一个按钮,我想要的框架仅在图2

enter image description here

包围绘图像现在可以说,我有以下情形,我已经画在屏幕中间的圆。

enter image description here

当我再按下按钮,刻度保持不变,但圈内还是在同样的位置,但现在我们已经改变了绘图区,所以圆/绘图看起来像它切断像图4

enter image description here

我想做的事就是这样,它定位在框架的中间移动绘图/贝塞尔路径。这样红色区域围绕蓝色圆圈。

回答

1

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

这意味着你将不得不寻找最左边的对象,最上面的对象,然后移动剩余的所有对象,然后向上移动这个数量,这样所有的对象都(作为一个分组)左上角在视图的框架内对齐。在此之后,您将需要自己识别哪个对象是最接近的最接近的对象,以及哪个对象是最接触的对象。

现在,由于您已将项目左移顶端,因此最右边的点将定义您的框架宽度,最底端的点将定义您的框架高度。

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

[第一个答案] 如果我正确理解你的问题,你可能希望仍然执行你的箱子帧操作,但如果你想扩展您可能想看看进入

contentScaleFactor or 
contentStretch 

性质。

contentScaleFactor应基于单数浮点值(即xWidth * scaleFactor,yHeight *比例因子)对两个维度进行缩放。

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

+0

不知道该怎么做,我发现如果我在上面写的代码之后立即调用setneedsdisplay,我会得到正确比例的绘图,但它的绘图上下文会从右侧切下,这是因为框架的大小调整。我需要做的是移动绘图,使它位于新框架的中心,不确定我该怎么做:S – Krewie

+0

您试图完成的绘图可能有助于获得良好的答案。你谈到击中一个会导致你的行为发生的按钮。你想要做什么的全貌? – trumpetlicks

+0

我用一些数字更新了这个问题 – Krewie