self.frame vs self.layer.bounds(在iOS中)

Rui*_*res 3 iphone calayer uiview ios

我有一个自定义UIView设置作为我的UIViewController'srootView.我以横向模式启动应用程序,我遇到了一些关于rootView边界的问题.经过一些调试后,我只是使用Xcode的控制台来检查发生了什么.这个ITCustomView's类是我的UIViewController'srootView,它是一个UIView's子类.所以我做了:

po self
Run Code Online (Sandbox Code Playgroud)

结果如下:

ITCustomView: 0x15af30; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x15b070>>
Run Code Online (Sandbox Code Playgroud)

然后我做了:

po [self layer]
Run Code Online (Sandbox Code Playgroud)

结果如下:

CALayer:0x15b070; position = CGPoint (394 512); bounds = CGRect (0 0; 1024 748); delegate = <ITCustomView: 0x15af30; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x15b070>>; sublayers = (<CALayer: 0x15a390>, <CALayer: 0x15b2c0>, <CALayer: 0xce2f6a0>); transform = CATransform3D (0 -1 0 0; 1 0 0 0; 0 0 1 0; 0 0 0 1); backgroundColor = <CGColor 0x15b040> [<CGColorSpace 0x1356e0> (kCGColorSpaceDeviceRGB)] ( 0.818317 0.818317 0.818317 1 )
Run Code Online (Sandbox Code Playgroud)

所以我的问题确实是:

  1. 在景观中不应该根据方向改变框架?

  2. 这些转换(方向更改)是否仅在图层上"可见"?

  3. 我应该开始检查边界(知道UIView's子类何时结束)self.layer.bounds而不是使用self.frame

  4. self.layer.bounds由于可能的转变,是否更安全(又名:最佳实践)总是随身携带?

我觉得奇怪(也有点惭愧自己)现在只注意到这种行为.

jrt*_*ton 6

frame 从superview的角度来看,它只是真正相关的,因为它是在superview的坐标系中表达的.

出于任何内部目的,bounds应使用视图的rect.

那么,对于你的子问题:

  1. 不,检查边界.
  2. 不,检查边界.
  3. 不,检查边界.
  4. 不,检查边界.

您不需要检查图层的边界,您可以使用视图的边界.所以,你的问题应该真的名为self.frame vs self.bounds,并且界限通常会胜出.