应用 CATransform3D 后的近似矩形?

Posted

技术标签:

【中文标题】应用 CATransform3D 后的近似矩形?【英文标题】:Approximate rect after applying CATransform3D? 【发布时间】:2015-06-30 13:43:55 【问题描述】:

我将CATransform3D 应用于视图。在它之后如何找到它的近似新帧?

我的意思是我应用了一个复杂的变换:旋转、平移、缩放和透视。我需要找到近似最小矩形之类的东西。我需要它,因为这个视图被添加到UIScrollView(要知道我需要的contentSize,当然要实现“scrollToItem:”)

【问题讨论】:

【参考方案1】:

如果你想获得完全包含这个转换视图的CGRect,你可以使用convertRect:toView:。例如:

CGRect rect = [viewWithTransforms convertRect:viewWithTransforms.bounds toView:self.view];

例如,灰色视图是UIView的一些变换,黑色边框是上图convertRect:toView:的结果:

【讨论】:

这很奇怪,但在我的情况下,它显示的结果与 frame 属性相同。你不知道他们有什么不同吗? 根据documentation,如果视图被转换,“frame属性的值是未定义的”。我并不惊讶它等于convertRect 结果(这是一个更通用的解决方案),但鉴于文档中的警告,一旦视图被转换,我就不会使用framebounds 描述了变换前矩形的大小。 我使用你的代码,但是当我当时缩放视图时它仍然给 CGRectInfinite。 convertRect 正在返回CGRectInfinite?还是frame 是?

以上是关于应用 CATransform3D 后的近似矩形?的主要内容,如果未能解决你的问题,请参考以下文章

旋转矩形的近似重叠面积

CATransform3D

使用 CATransform3D 性能不佳

将标签移动到目标c中的矩形后如何从标签中删除触摸动作

3D 动画 - CABasicAnimation 和 CATransform3D 提供视图之间的差距

CATransform3D介绍