Ios 为什么UIView没有转换.a和转换.d?

Ios 为什么UIView没有转换.a和转换.d?,ios,uiview,uiscrollview,Ios,Uiview,Uiscrollview,我在主视图中放置了一个uicrollview填充,并在其中放置了一个名为\u contentView的UIView,最后将一些名为\u annotationView的\u contentView描述如下: _scrollView - | - _contentView *| *_annotationView1 *_annotationV

我在主视图中放置了一个
uicrollview
填充,并在其中放置了一个名为
\u contentView
UIView
,最后将一些名为
\u annotationView
\u contentView描述如下:

_scrollView
           - |
           -  _contentView
                   *|
                    *_annotationView1
                    *_annotationView2
                    *……
当我实现
UIScrollView
事件“
scrollViewDidZoom
”时,我得到了
\u contentView.transform.a
\u contentView.transform.d
数据。但是
的子视图如下所示:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    NSLog(@"content scale:%f", _contentView.transform.a);  //changed every time
    NSLog(@"content scale:%f", _contentView.transform.d);  //changed every time
    for (UIView *view in [_contentView subviews]) {
        NSLog(@"x:%f",view.transform.a);   //always got 1
        NSLog(@"y:%f",view.transform.d);   //always got 1
    }
}

为什么会发生这种情况?

子视图转换矩阵是相对于其超视图的

换句话说,如果您仅将仿射变换矩阵应用于
\u contentView
,则其子视图仍将具有由superview的标识矩阵组成的标识矩阵。这反映在本段中:

每个子视图的坐标系建立在其祖先的坐标系之上。因此,修改视图的“变换”属性时,该更改会影响视图及其所有子视图。但是,这些更改仅影响屏幕上视图的最终渲染。由于每个视图都绘制其内容并相对于其自身边界布置其子视图,因此在绘制和布局期间可以忽略其superview的变换


还可以查看同一链接文档中的“图1-6旋转视图及其内容”

谢谢。那么,如何在放大或缩小时固定子视图的大小?就像system map app的注释一样,它们的大小是固定的。您可以在滚动时缩放子视图,以便在缩小时使其变大,在放大时使其变小。是的,我也这样做了。但是我发现缩放率可能不一样。contentView的子视图放大比默认值小。我只是这样做:if(_contentView.transform.a>1&&_contentView.transform.a