我有一个照片库应用程序有一个问题为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上运行/构建它时,缩放的动画变得很奇怪。首先将内容偏移设置为将来的位置,然后放大。因此图像会向上或向下跳跃。
之前是否有人遇到此问题或有任何想法?
答案 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];
}