2014-01-08 22 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

相關問題