2011-01-23 53 views
2

这让我头痛不已。缩放深嵌在UIScrollView中的子视图

我正在尝试为iPad创建一个UML绘图应用程序。

我目前有功能将类添加到“画布”。画布只是一个UIView,它位于UIScrollView中。

每个类元素都是包含类名,属性和方法(UITextFields)的UIView。这些都是画布的子视图。

我遇到的问题是当我放大使用捏/缩放功能的类我只是变得模糊UITextFields。据我的理解,这是因为UIScrollView只是应用了一个转换,而我需要处理自我缩放。

然而,我能想到做到这一点的唯一方法是重绘类并使它们变大,这可能会扭曲它们相对于彼此的位置。例如,如果我有两个并排的班级,而且一个班级的规模扩大了一倍,那么左侧的班级可能会重叠正确的班级。

我已经搜索了解决方案的几个小时,并且我无处可去,有没有人知道可以说明类似我的情况的代码示例或建议?或者,如果没有,示例说明如何以我描述的方式缩放UITextField(或UILabel)?

回答

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有问题。现在我希望这可以为任何有兴趣的人提供帮助。

+0

你有什么想法http://stackoverflow.com/q/19856928/935381 – Hitarth 2013-11-09 06:48:31