gpt4 book ai didi

iphone - UIScrollView zoomToRect 需要调用两次

转载 作者:行者123 更新时间:2023-11-28 18:43:53 25 4
gpt4 key购买 nike

我想平移到我的 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 调用放大,但需要第二个调用才能真正平移到正确的位置。一旦在正确的位置,第三次调用什么都不做 - 这是我对第二次调用的预期。

这里有什么问题?根据the Apple docs我希望它能在第一次通话时正常工作。

示例项目可在 github 上获得.

最佳答案

“问题”是重写了以 ImageView 为中心的 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 中调整 ImageView 取决于自动缩放状态:

- (void)layoutSubviews 
...
if (!self.automaticZooming) {
imageView.frame = frameToCenter;
}
...
}

3.) 缩放完成后重置自动缩放状态:

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

关于iphone - UIScrollView zoomToRect 需要调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com