xcode 6 zoomToRect动画问题

时间:2014-09-12 07:47:22

标签: xcode uiscrollview ios8

我有一个照片库应用程序有一个问题为ios 8做好准备。 图像显示在UIPageViewController中,每个页面都有一个带有自定义UIScrollView类的视图。它就像Apples PhotoScroller Sample(https://developer.apple.com/library/ios/samplecode/PhotoScroller/Introduction/Intro.html

一样

我添加了一个UITapGestureRecognizer进行双击。这是我用于缩放的代码:

- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer {
if (self.minimumZoomScale == self.maximumZoomScale) return;
if (self.zoomScale == self.minimumZoomScale) didDoubleTap = NO;

CGPoint pointInView = [recognizer locationInView:_zoomView];

CGFloat newZoomScale;
if (!didDoubleTap && self.zoomScale <= self.minimumZoomScale) {
    newZoomScale = self.zoomScale * 2.5f;
    newZoomScale = MIN(newZoomScale, self.maximumZoomScale);
    didDoubleTap = YES;
}
else {
    newZoomScale = self.minimumZoomScale;
    didDoubleTap = NO;
}

CGSize scrollViewSize = self.bounds.size;

CGFloat w = scrollViewSize.width / newZoomScale;
CGFloat h = scrollViewSize.height / newZoomScale;
CGFloat x = pointInView.x - (w / 2.0f);
CGFloat y = pointInView.y - (h / 2.0f);

CGRect rectToZoomTo = CGRectMake(x, y, w, h);
[self zoomToRect:rectToZoomTo animated:YES];
}

当我在xcode 5.1上完美地运行它时,这就像在任何其他照片应用程序中一样。但是当我在xcode 6 gm上运行/构建它时,缩放的动画变得很奇怪。首先将内容偏移设置为将来的位置,然后放大。因此图像会向上或向下跳跃。

之前是否有人遇到此问题或有任何想法?

2 个答案:

答案 0 :(得分:10)

好吧,我找到了解决方法。问题是在缩放之前动画调用layoutsubviews。所以现在我做自己的动画

[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^ {
    inTransition = YES;
    [self zoomToRect:rectToZoomTo animated:NO];
    inTransition = NO;
    [self layoutSubviews];
} completion:nil];

但如果有人能告诉我为什么要这样做会很好。

修改 如果有人仍然感兴趣,请将代码从layoutsubviews移至scrollViewDidZoom:(UIScrollView *)scrollView。因此,没有必要使用奇怪的动画来缩放缩放也能顺利运行。

答案 1 :(得分:4)

使用捏合手势进行缩放时,我发现了同样的错误。 我通过在scrollViewDidScroll委托方法中调用layoutSubviews来解决这个问题:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [self layoutSubviews];
}