2010-07-13 94 views

回答

1

使用UIView的動畫。

解釋有點長,所以我希望這個小例子能夠解決一些問題。 看那documantation進一步說明

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

expandedView.frame = prevFrame; 

[UIView commitAnimations]; 

它是從一個項目中,我目前正在所以這是一個有點特殊,但我希望你能看到的基本知識。

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

我打這個'偶爾會失敗'的情況下,這會導致動畫在默認的持續時間運行。這種情況似乎發生在先前和目標矩形尺寸匹配時,即使通過起源是不同的。這裏是我的新動畫代碼,添加了scrollRectToVisible行,並且我不再遇到這種失敗情況。 [UIView animateWithDuration:2 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^ {scrollView scrollRectToVisible:target animated:NO]; [scrollView zoomToRect:target animated:NO]; } completion:nil]; – fionbio 2013-02-27 01:30:51

+0

乾草它的好處! 它工作正常 謝謝 – 2013-07-10 10:45:21

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]; 
相關問題