首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅将CGAffineTransform的scale组件应用于UIView

仅将CGAffineTransform的scale组件应用于UIView
EN

Stack Overflow用户
提问于 2013-07-17 22:11:23
回答 2查看 920关注 0票数 1

我有一个UIView,它已经应用了各种缩放和旋转CGAffineTransforms,以响应触摸屏手势。

当缩放操作完成时,我希望将视图的边界调整为新的大小,然后让视图以1.0的比例重新绘制自己,同时保持变换的所有其他组件不变。

为了调整视图的边界,我使用:

代码语言:javascript
复制
self.myView.bounds = CGRectApplyAffineTransform(self.myView.bounds, self.myView.transform);

为了“撤消”缩放变换,我尝试这样做:

代码语言:javascript
复制
self.myView.transform = CGAffineTransformConcat(self.myView.transform, CGAffineTransformMakeScale(1, 1));

然后调用[myView setNeedsDisplay]让视图自己重绘。

然而,这不会产生预期的结果,并且当应用旋转变换时,上面的代码似乎也会导致应用看起来像是横向平移变换的东西。

最干净的方式是“撤销”一个缩放变换,并让视图以1:1的比例重新绘制,而所有其他变换保持不变?

EN

回答 2

Stack Overflow用户

发布于 2013-07-17 22:22:15

我正在处理类似的事情,我所做的是将单独的组件存储在另一个结构中(缩放、旋转、平移)。这样,您就可以轻松地再次重新创建转换(不过要注意操作的顺序)。

但有一件事:我建议你不要改变界限,而只是对变换应用一个缩放操作。这将避免一些潜在的不必要的布局。所有这些东西都可以完全用transform属性来处理。你现在做的方式不会改变任何事情,因为应用1的尺度是没有意义的。如果将视图放大2倍,则需要缩放0.5倍才能返回到原始视图。或者,正如我上面所说的,存储所有组件并从单位矩阵重新创建它(矩阵数学很快,不用担心)。

票数 0
EN

Stack Overflow用户

发布于 2013-07-18 13:09:48

将比例值保存在变量中,然后尝试将CGAffineTransformMakeScale(1,1)更改为

代码语言:javascript
复制
CGAffineTransformMakeScale(1/totalScaleWidth, 1/totalScaleHeight)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17702120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档