来自Apple 文档上的 CALayer 类参考
您可以使用单位坐标空间指定此属性的值。该属性的默认值为 (0.5, 0.5),表示图层边界矩形的中心。对视图的所有几何操作都围绕指定点进行。例如,对具有默认锚点的图层应用旋转变换会导致图层围绕其中心旋转。将锚点更改为不同的位置会导致图层围绕该新点旋转。
来自Apple 文档上的 UIView 类参考
这个矩形定义了视图在其父视图坐标系中的大小和位置。您在布局操作期间使用此矩形来调整视图的大小和位置。设置此属性会相应地更改由 center 属性指定的点和边界矩形中的大小。框架矩形的坐标始终以点为单位指定
所以从我的角度来看,一旦视图在另一个视图中,当你改变框架时,你改变的是相对于他的超级视图而不是自身的中心和大小。
为了测试我的理论,我做了一个小例子
import UIKit
class ViewController: UIViewController {
var insideView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Setup Inside view
self.insideView = UIView()
var frame: CGRect = CGRectZero
frame.size.height = 40.0
frame.size.width = 40.0
frame.origin.x = self.view.frame.size.width / 2 - 20.0
frame.origin.y = self.view.frame.size.height / 2 - 20.0
self.insideView.frame = frame
self.insideView.backgroundColor = UIColor.redColor()
self.view.addSubview(self.insideView)
NSLog("One layer -> InsideView size: %@", NSStringFromCGRect(self.insideView.frame))
// Output: 2015-05-22 20:13:11.342 test[42680:12030822] One layer -> InsideView size: {{140, 264}, {40, 40}}
// Setup Another layer
var insideLayer: CALayer = CALayer()
insideLayer.backgroundColor = UIColor.blueColor().CGColor
var insideLayerFrame: CGRect = self.insideView.layer.frame;
insideLayerFrame.origin.x = 0.0
insideLayerFrame.origin.y = 0.0
insideLayer.frame = insideLayerFrame
insideLayer.anchorPoint = CGPoint(x: 0.0, y: 0.0)
self.insideView.layer.addSublayer(insideLayer)
NSLog("Two layers -> InsideView size: %@", NSStringFromCGRect(self.insideView.frame))
// Output: 2015-05-22 20:13:11.342 test[42680:12030822] Two layers -> InsideView size: {{140, 264}, {40, 40}}
}
}
所以我将视图层留在它的位置并添加一个我可以操作的新的。
结果是:
希望这可以帮助:)