我有一个代表地图的滚动视图,它上面有引脚,当用户放大地图时,我的应用使用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选择器,它可以工作但是保持对早期操作系统版本的支持,并且使用最少量的额外代码,我没有专家的交叉版本兼容性以及如何最有效地实现它
由于
答案 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;
}
}
}