有没有什么方法可以改变UIScrollView的zoomToRect的持续时间?

时间:2010-07-13 15:11:57

标签: iphone objective-c ios iphone-sdk-3.0

有没有办法为[UIScrollView zoomToRect:zoomRect animated:YES]的动画指定持续时间?

目前它可以是快animated:YES或即时animated:NO

我想指定一段时间,例如[UIScrollView setAnimationDuration:2];或类似的东西。

提前致谢!

3 个答案:

答案 0 :(得分:1)

使用UIView的动画。

解释时间有点长,所以我希望这个小例子可以解决一些问题。 查看文档以获取进一步的说明

[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 2];
[UIView setAnimationDelegate: self];
[UIView setAnimationDidStopSelector: @selector(revertToOriginalDidStop:finished:context:)];

expandedView.frame = prevFrame;

[UIView commitAnimations];

这是我正在开展的一个项目,所以它有点具体,但我希望你能看到基础知识。

答案 1 :(得分:0)

我在UIScrollView子类中运气很好:

- (void)zoomToRect:(CGRect)rect duration:(NSTimeInterval)duration
{
    [self setZoomLimitsForSize:rect.size];

    if (duration > 0.0f) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:duration];
    }
    [self zoomToRect:rect animated:NO];
    if (duration > 0.0f)
        [UIView commitAnimations];

    [self zoomToRect:rect animated:(duration > 0.0f)];
}

这有点像作弊,但它似乎主要起作用。偶尔会失败,但我不知道为什么。在这种情况下,它只是恢复到默认动画速度。

答案 2 :(得分:0)

实际上这些答案非常接近我最终使用的答案,但我会分别发布,因为它是不同的。基本上,如果目标zoomScale与当前缩放比例相同,则zoomToRect无法正常工作。

你可以尝试scrollToRect,但我没有运气。

只需使用contentOffset并将其设置为zoomRect.origin并将其嵌套在动画块中。

[UIView animateWithDuration:duration
                      delay:0.f
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
    if (sameZoomScale) {
        CGFloat offsetX = zoomRect.origin.x * fitScale;
        CGFloat offsetY = zoomRect.origin.y * fitScale;

        [self.imageScrollView setContentOffset:CGPointMake(offsetX, offsetY)];
    }
    else {
        [self.imageScrollView zoomToRect:zoomRect
                                animated:NO];
    }
                 }
                 completion:nil];