停止仿射变换应用于子视图

Posted

技术标签:

【中文标题】停止仿射变换应用于子视图【英文标题】:Stop affine transform from applying on subview 【发布时间】:2016-09-02 14:06:42 【问题描述】:

我有一个UIView,里面有一个UILabel

UIView 上应用仿射变换后,使用:

myView.transform = CGAffineTransformMakeScale(4, 4);

我的UILabel(这是 myView 的子视图)也增长了。

有没有办法防止这种情况发生?

我试过了:

1) 在标签上使用CGAffineTransformIdentity 标志。

2) 向 myView 添加一个 superview 并将 myView 添加为 superview 的 subview,并将 label 作为 subview 添加到 superview(而不是 myView)。

它们似乎都不起作用,标签一直在增长。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您使用选项 2 回答了您自己的问题。由于您没有提供任何代码,因此不确定为什么它不起作用。下面的操场代码显示它将起作用。取消注释最后一行以转换子视图而不是标签。

import UIKit
import XCPlayground

let superview = UIView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))
XCPlaygroundPage.currentPage.liveView = superview
superview.backgroundColor = UIColor.redColor()

let view = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
view.backgroundColor = UIColor.greenColor()
superview.addSubview(view)

let label = UILabel(frame: CGRect(x: 20, y: 10, width: 40, height: 40))
label.text = "Hello"
superview.addSubview(label)

//view.transform = CGAffineTransformMakeScale(2, 2)

【讨论】:

以上是关于停止仿射变换应用于子视图的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL基础仿射变换原理解析

是否可以旋转/仿射变换 UIMenuController

OpenCV图像变换(仿射变换与透视变换)

CGAffineTransform-仿射矩阵的变换

一文搞懂仿射变换

【转】仿射变换及其变换矩阵的理解