这让我头疼不已。
我正在尝试为iPad创建一个UML绘图应用程序。
我目前有将功能添加到'画布'的功能。画布只是一个UIView,位于UIScrollView中。
每个类元素都是一个包含类名,属性和方法(UITextFields)的UIView。这些都是画布的子视图。
我遇到的问题是当我使用捏合/缩放功能放大类时,我只是模糊的UITextFields。据我所知,这是因为UIScrollView只应用了一个转换,我需要自己处理扩展。
然而,我能想到这样做的唯一方法是重新绘制类并使它们变大,这可能会使它们相对于彼此的位置失真。例如,如果我有两个并排的类,一个大小加倍,那么左类可能与右类重叠。
我已经搜索了几个小时的解决方案而且我无处可去,是否有人知道代码示例或可以说明类似于我的情况的建议?或者,如果没有,这个例子展示了如何以我描述的方式扩展UITextField(或UILabel)?
答案 0 :(得分:2)
我认为根据我的问题是如何表达的,这可能不是最明显的答案。但我解决了这个问题:
第一步是实施:
- (void)scrollViewDidEndZooming:(UIScrollView
*)scrollView withView:(UIView *)view atScale:(float)scale;
关键点我似乎缺少(不知何故),当UIScrollView被缩放时,它会将其比例因子重置为1.所以想象你缩放到125%,然后缩小25%,你实际上是在看93%(ish)的原始视图,而不是100%。
如果像我一样,你试图根据原始尺寸缩放子视图,这显然会引发你的绘图。
最好的方法是跟踪比例(我使用变量 scaleTracker ),然后使用此值来缩放视图。
更具体地说,我的问题是使用了以下代码:
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
scaleTracker *= scale;
[canvas setTransform:CGAffineTransformIdentity];
canvas.frame = CGRectMake((int)canvas.original.origin.x,
(int)canvas.original.origin.y,
(int)(canvas.original.size.width * scaleTracker),
(int)(canvas.original.size.height * scaleTracker));
}
祝其他任何有UIScrollView问题的人好运。现在我希望这可以为任何感兴趣的人提供一些帮助。