Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xcode 6 zoomToRect动画问题_Xcode_Uiscrollview_Ios8 - Fatal编程技术网

xcode 6 zoomToRect动画问题

xcode 6 zoomToRect动画问题,xcode,uiscrollview,ios8,Xcode,Uiscrollview,Ios8,我有一个照片库应用程序,在为ios 8做准备时遇到了一个问题。 图像显示在UIPageViewController中,每个页面都有一个带有自定义UIScrollView类的视图。就像苹果的PhotoScroller样本() 我为双击添加了一个UITapGestureRecognitor。以下是我用于缩放的代码: - (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer { if (self.minimumZoomScal

我有一个照片库应用程序,在为ios 8做准备时遇到了一个问题。 图像显示在UIPageViewController中,每个页面都有一个带有自定义UIScrollView类的视图。就像苹果的PhotoScroller样本()

我为双击添加了一个UITapGestureRecognitor。以下是我用于缩放的代码:

- (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动画:是];
在旧应用程序中为我修复了它。