xcode 6 zoomToRect动画问题
我有一个照片库应用程序,在为ios 8做准备时遇到了一个问题。 图像显示在UIPageViewController中,每个页面都有一个带有自定义UIScrollView类的视图。就像苹果的PhotoScroller样本() 我为双击添加了一个UITapGestureRecognitor。以下是我用于缩放的代码:xcode 6 zoomToRect动画问题,xcode,uiscrollview,ios8,Xcode,Uiscrollview,Ios8,我有一个照片库应用程序,在为ios 8做准备时遇到了一个问题。 图像显示在UIPageViewController中,每个页面都有一个带有自定义UIScrollView类的视图。就像苹果的PhotoScroller样本() 我为双击添加了一个UITapGestureRecognitor。以下是我用于缩放的代码: - (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer { if (self.minimumZoomScal
- (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];
}
-(void)scrollViewDoubleTapped:(UITapGestureRecognizer*)识别器{
if(self.minimumZoomScale==self.maximumZoomScale)返回;
如果(self.zoomScale==self.minimumZoomScale)DIDDOOLETAP=NO;
CGPoint pointInView=[识别器位置INVIEW:_zoomView];
新动物园谷;
如果(!diddoulletap&&self.zoomScale好,我找到了一个解决方法。问题是在缩放之前动画调用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
。这样就不需要那种奇怪的动画了,收缩缩放也可以顺利工作。我在用收缩手势缩放时发现了同样的错误。
我通过在scrollViewDidScroll委托方法中调用LayoutSubView解决了这个问题:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self layoutSubviews];
}
您将inTranstion设置为“是”,然后设置为“否”。这对解决方案至关重要吗?此解决方法对我也适用。但使用平移手势缩放时也存在相同的错误。您解决了吗?我只是在layoutSubviews中使用此选项,如果(self.zoomScale
谢谢!调用[myScrollView layoutSubviews]
在-(void)scrollViewDidZoom:(UIScrollView*)scrollView中;
使用[myScrollView设置ZoomScale:myScale动画:是];
在旧应用程序中为我修复了它。