iOS3.2 +中的iPhone viewForZoomingInScrollView行为更改

时间:2010-07-03 23:17:17

标签: iphone ios-simulator ios4

我有一个代表地图的滚动视图,它上面有引脚,当用户放大地图时,我的应用使用viewForZoomingInScrollView来确保所有引脚保持相同的大小(我确保引脚点的位置保持不变通过在图层上设置锚点,这里是代码的一般要点..

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    NSLog(@"view for zooming in scroll view...");

    double scale = mapScrollViewSize.width/scaledSize.width;
    NSArray *pins = [mapView subviews];
    for (int i=0; i<[mapPins count]; i++) 
    {
        AMapPin *mapPin = (AMapPin *)[mapPins objectAtIndex:i];
        if([mapPin isKindOfClass:[AMapPin class]])
        {
            CGAffineTransform transform1 = CGAffineTransformMakeScale(scale, scale);
            mapPin.transform = transform1;
        }
    }
    return mapView;
} 

这适用于操作系统版本直到3.1.3当我滚动时我可以反复看到控制台中的NSLog并且我的子视图正确调整大小(在缩放期间)..在iOS4中,实际上在SDK 4的模拟器中在iPhone 4上,选择器似乎只被调用一次,而不是在早期操作系统版本上重复调用,因此子视图的大小调整根本没有效果。

我认为设计已经改变,但我想知道我最好的选择是什么 a)更改我的代码,以便使用viewForZoomingInScrollView将更改保持在最低限度 b)如何使用名为scrollViewDidZoom的新3.2选择器,它可以工作但是保持对早期操作​​系统版本的支持,并且使用最少量的额外代码,我没有专家的交叉版本兼容性以及如何最有效地实现它

由于

1 个答案:

答案 0 :(得分:1)

这会兼容吗?

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    [self scrollViewDidZoom:scrollView];
    return mapView;
} 

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    NSLog(@"view for zooming in scroll view...");

    double scale = mapScrollViewSize.width/scaledSize.width;
    NSArray *pins = [mapView subviews];
    for (int i=0; i<[mapPins count]; i++) 
    {
        AMapPin *mapPin = (AMapPin *)[mapPins objectAtIndex:i];
        if([mapPin isKindOfClass:[AMapPin class]])
        {
            CGAffineTransform transform1 = CGAffineTransformMakeScale(scale, scale);
            mapPin.transform = transform1;
        }
    }
}