我希望平移到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上提供了一个示例项目。
答案 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;
}