我有一个照相馆应用程序,但在准备iOS 8时遇到了问题。
图像显示在UIPageViewController中,并且每个页面都有一个带有自定义UIScrollView类的 View 。就像苹果的PhotoScroller示例(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上运行/构建它时,缩放的动画变得很奇怪。首先,将内容偏移设置为将来的位置,然后将其放大。因此图像在向上或向下跳跃。
有人以前有这个问题或有任何想法吗?
最佳答案
好吧,我找到了一种解决方法。问题是动画在缩放之前调用了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
。因此,不需要怪异的动画即可轻松缩放。
关于xcode - xcode 6 zoomToRect动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803292/