2014-01-08 20 views
0

我把UIScrollView填充在主视图中,并把一个叫它_contentViewUIView,最后放一些UIView命名_annotationView_contentView.It可能像下面来描述:为什么UIView没有transform.a和transform.d?

_scrollView 
      - | 
      - _contentView 
        *| 
        *_annotationView1 
        *_annotationView2 
        *…… 

当我实现了UISrollView事件“ scrollViewDidZoom”,和我_contentView.transform.a_contentView.transform.ddata.However,_contentView像这样子视图:

- (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 
    } 
} 

为什么发生?

回答

0

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

换句话说,如果你只是将一个仿射变换矩阵应用到_contentView,它的子视图仍然会有一个单元矩阵,它与超视图的矩阵组成。这反映在本段从Apple's View Programming Guide

建立在其祖先的坐标系统中的坐标的每个子视图的系统。因此,当您修改视图的transform属性时,该更改会影响视图及其所有子视图。但是,这些更改仅影响屏幕上视图的最终呈现。由于每个视图都会绘制其内容,并将其子视图相对于其边界进行布局,因此它可以在绘制和布局期间忽略其超视图的变换。

另请参阅“图1-6旋转视图及其内容”。

+0

Thanks.Well,如何在_contentView放大或缩小时修复子视图的大小?与系统地图应用的注释一样,它们的大小也是固定的。 – Sedgwickz

+0

您可以缩放滚动时的子视图,以便缩小时缩小子视图,缩小时缩小。 – sergio

+0

是的,我也这样做。但是我发现缩放比例可能不一样。_contentView的子视图放大小于它的默认值。我只是这样做:if(_contentView.transform.a> 1 && _contentView.transform.a <= 1.5){CGAffineTransform transform = CGAffineTransformMakeScale(2-_contentView.transform.a,2-_contentView.transform .D); view.transform = transform; } – Sedgwickz

相关问题