关于切割/裁剪uiview

时间:2012-06-03 18:34:58

标签: xcode uiview drawrect bounding-box

所以我有一个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所示。 / p>

enter image description here

我想要做的是移动绘图/贝塞尔曲线路径,使其位于帧的中间。这样红色区域就围绕着蓝色圆圈。

1 个答案:

答案 0 :(得分:1)

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

这意味着你必须找到最左边的对象,最顶层的对象,然后移动该数量剩余的所有对象,并向上移动该数量,以便所有对象(作为分组)顶部-left在视图的框架内对齐。在此之后,您将需要自我识别哪个对象是最正确的触摸,哪个对象是最触摸的对象。

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

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

[首次回答] 如果我正确理解你的问题,你可能仍想要执行你的框架操作,但如果你想扩展你可能想要查看

contentScaleFactor or
contentStretch

性质。

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

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