2014-01-24 68 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