UIScrollView的zoomToRect需要调用两次

时间:2011-09-01 12:16:45

标签: iphone ios uiscrollview

我希望平移到UIScrollView中的某个点,同时这样做也可以放大到最大缩放级别。在这里省略缩放矩形计算,似乎需要调用zoomToRect两次来缩放和平移我想要的位置。

[self performSelector:@selector(zoom) withObject:nil afterDelay:1.0];
[self performSelector:@selector(zoom) withObject:nil afterDelay:2.0];
[self performSelector:@selector(zoom) withObject:nil afterDelay:3.0];

- (void) zoom
{
    [self.imageScrollView zoomToRect:(CGRect){ 913.556, 0, 320, 465 }
                            animated:YES];
}

第一个zoom调用会放大,但第二个调用会实际平移到正确的位置。一旦处于正确的位置,第三个呼叫什么都不做 - 这是我已经预期的第二个呼叫。

这里有什么问题?根据{{​​3}},我希望它能够在第一次通话时工作。

the Apple docs上提供了一个示例项目。

1 个答案:

答案 0 :(得分:5)

“问题”是被覆盖的layoutSubviews,它以图像视图为中心。这会在第一次调用

后影响结果帧的位置
[self.scrollView zoomToRect:(CGRect){ 913.556, 0, 320, 465 } animated:YES];

我做了一些测试并找到了快速入侵,这可能会引导您找到符合您需求的解决方案:

1。)覆盖zoomToRect:表示您正在进行自动缩放

- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated {
    self.automaticZooming = YES;
    [super zoomToRect:rect animated:animated];
}

2.。)在layoutSubviews 中调整图像视图取决于自动缩放状态:

- (void)layoutSubviews 
...
    if (!self.automaticZooming) {
        imageView.frame = frameToCenter;
    }
...
}
完成缩放后,

3。)重置自动缩放状态:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
    self.automaticZooming = NO;
}