2014-01-24 103 views
0

我有UIScrollView的問題。使用scrollViewDidScroll調整視圖的大小

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 40,320,500)]; 
MKMapView *mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 40, 320, 120)]; 

,我在此改變滾動視圖

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    [mapView setFrame:CGRectMake(0, 40, 320, 120 - scrollView.contentOffset.y)]; 
} 

一切都OK,但它不順利時,滾動和縮放的MapView。有更好的解決方案嗎?

謝謝。

+0

你在scrollView裏面有沒有其他視圖在你的mapView之上?我在這裏假設mapView在scrollView中。 – n00bProgrammer

+0

是的,mapView是scrollView的子視圖 – Max

+0

告訴我,如果我錯了。您正嘗試實現類似Facebook iOS應用中的簽入視圖,其中地圖在用戶滾動到位置列表底部時調整大小? – n00bProgrammer

回答

1

調整scrollViewDidScroll:方法中的視圖是一項徵稅任務。至少scrollViewDidScroll:並不總是被調用,而不是每次偏移的變化。

更好的方法是將MKMapView的框架設置一次,該框架足夠大以覆蓋比scrollView的可見部分更多的框架。您在之上mapView之上添加您的位置列表

然後在scrollViewDidScroll:中,設置mapViewcenter,使其看起來好像mapView正在調整大小。在我的情況下,我做的是改變地圖的center,因爲偏移量已更改。喜歡的東西:

mapView.center = CGPointMake(mapView.center.x, scrollView.contentOffset.y + DELTA); 

DELTA這裏是你將不得不打了試圖讓,保持地圖的中心值(用戶的位置,我想)你的列表的頂部邊框之間。和scrollView的頂部。

編輯:在我的情況下,DELTA是偏移量的一半變化(尊重負面和正面的價值觀)。

+0

謝謝你的回答。我會嘗試。 – Max

+0

我試過了。它看起來更好。這是最好的做法,不是嗎? – Max

+0

這是我能達到的最接近的。如果我找到更優化的東西,我會在編輯中添加它。但與此同時,如果這有幫助,接受它。 :) – n00bProgrammer